1. Task (任务):
很容易调用 ThreadPool.QueueUserWorkItem 实现异步操作,但是这个技术有许多
.net 引入Task类型来使用任务。
如下几种方式都是实现异步的方法:
public static void Method(){ThreadPool.QueueUserWorkItem((o) => Console.WriteLine(""));//通过Start()来调度任务new Task(() => Console.WriteLine("")).Start();//通过Run方法 来调度任务Task.Run(() => Console.WriteLine(""));
Task.Factory.StartNew(() => Console.WriteLine(""));}
a. 为了创建一个Task,需要调用构造器并传递一个Action 或 Action<Object> 委托。这个委托就是你想执行的代码操作。
b. 如果调用Run 可以传递一个Action 或 Fun<Tresult> 委托。 两种区别在于 Aciton 无返回值, Fun 有返回值
2. 等待 任务完成并获取结果:
public static void Method2(){//创建一个TaskTask<int> t = new Task<int>(n => Sum((int)n), 10);//启动任务 t.Start();//等待任务完成 t.Wait();//获取结果Console.WriteLine("Sum is:{0}", t.Result);}private static int Sum(int n){int sum = 0;for (; n > 0; n--){checked { sum += n; }}return sum;}
3. 取消任务:
CancellationTokenSource
Parallel 静态 For,ForEach和Invoke.
Task.Run(async () => await Result);