.net 任务(Task)
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() { //创建一个Task Task<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);