第5章
1.仅包含async和await关键字的异步方法与用Task.Run调用的异步方法有和不同?
【参考解答】
async和await关键字是C# 5.0提供的功能,仅包含async和await关键字的异步方法不会创建新线程,它只是表示在当前线程中异步执行指定的任务。
而Task.Run方法是.NET框架4.5提供的功能,它会在线程池中用单独的线程执行某个任务。
2.把普通方法和异步方法作为任务来执行时,调用方法有何不同?
【参考解答】
普通方法要用Task.Run方法去调用,或者用Task、Task<TResult>类的构造函数显示创建Task实例,然后再启动。
异步方法不需要用Task.Run方法去调用。
3.Action和Func委托有什么不同?
【参考解答】
Action委托封装了不带返回值的方法(有0~16个输入参数,返回类型为void),Func 委托封装了带返回值的方法(有0~16个输入参数,返回类型为TResult)。
4.有几种创建任务的方式?
【参考解答】
有4种方式。
(1)利用Task.Run方法隐式创建和执行任务;
(2)利用async和await关键字隐式创建异步任务;
(3)利用WPF控件的调度器隐式创建和执行任务;
(4)通过显式调用Task或Task<TResult>的构造函数创建任务。
5.在WPF应用程序中有几种可用的定时器?
【参考解答】
有3种。
(1)System.Timers.Timer类;
(2)System.Windows.Threading.DispatcherTimer类;
(3)System.Threading.Timer类。
6.简述实现任务的取消功能的机制。
【参考解答】
System.Threading.CancellationTokenSource用于创建取消通知,称为取消源。
System.Threading.CancellationToken结构用于传播应取消操作的通知,称为取消令牌。
调用任务的代码在分配任务前,可先用CancellationTokenSource类创建一个取消源。
在调用任务的代码中,可通过取消源的Cancel方法发出取消通知,该方法会将每个取消令牌副
本上的IsCancellationRequested属性都设置为true。
执行任务的方法接收到取消通知后,可以终止执行。