Task的出现是为了使多线程编程变得简单,Task和Thread还不是一回事,Task由TaskManager管理,一个Task会执行在一个Thread上,但是如果没有足够的Thread,TaskManager会暂时挂起这个Task,直到有足够的Thread资源为止。Task的另外一个好处是TaskManager会把执行这些Task的Thread自动的分配在不同的Core上,就是所谓的并行编程,拿我的i7来说,有4个物理Core。如果有4个Task,那么.net TaskManager会在4个Core上建立4个独立的Thread,然后把4个Task放到这4个Thread运行
async修饰一个异步方法,await 运算符应用于一个异步方法的任务挂起方法的执行,直到等待任务完成。在一个方法中,按过程执行代码,异步方法放的位置先后考虑。
取消异步操作
CancellationToken 和 CancellationTokenSource 这两个类
CancellationTokenSource source = new CancellationTokenSource(); CancellationToken token = source.Token;
Thread.Sleep(5000);
source.cancle();
public static async Task ExecuteAsync(CancellationTokentoken) { if (token.IsCancellationRequested) { return; } await Task.Run(() => CircleOutput(token), token); }
异步编程框架都是基于Task,前段时间出现的Reactive Extention(Rx)也是如此