c# Task 的几种创建方法

为什么80%的码农都做不了架构师?>>>   hot3.png

1.使用TaskFactory 工厂方法来创建

  1. var tf = new TaskFactory();

  2. Task.Factory.StartNew(()=>{})

  3. var t1 = tf.StartNew(TaskMethod, "using a task factory");

2.使用new Task 来创建 

  1. var t3 = new Task(TaskMethod, "using task constructor and start");

  2. t3.Start();

3. 使用Task.Run()来创建

var t4 = Task.Run(() => TaskMethod("using the run method"));

4.ContinueWith 连续性的异步调用A=>B=>C=>D

三、Task的任务控制:Task最吸引人的地方就是他的任务控制了,你可以很好的控制task的执行顺序,让多个task有序的工作

方法名 说明
Task.Wait task1.Wait();就是等待任务执行(task1)完成,task1的状态变为Completed。
Task.WaitAll 待所有的任务都执行完成:
Task.WaitAny 发同Task.WaitAll,就是等待任何一个任务完成就继续向下执行
Task.ContinueWith 第一个Task完成后自动启动下一个Task,实现Task的延续 
Delay 延迟执行
CancellationTokenSource

通过cancellation的tokens来取消一个Task。 需要首先定义一个tokenss

var tokenSource = new CancellationTokenSource();

var token = tokenSource.Token;

IsCancellationRequested 在方法体内部判断是否有取消

tokenSource.Cancel();

动态并行(TaskCreationOptions.AttachedToParent) 父任务等待所有子任务完成后 整个任务才算完成

var task = Task.Factory.StartNew(() => DisplayNode("task one"),
                                            CancellationToken.None,
                                            TaskCreationOptions.None,
                                            TaskScheduler.Default);
            task.Wait();

 

void DisplayNode(string messg){
Task.Factory.StartNew(() =>
Console.WriteLine(messg)
, CancellationToken.None, TaskCreationOptions.AttachedToParent, TaskScheduler.Default);
}
 

转载于:https://my.oschina.net/stuyun/blog/3010590

你可能感兴趣的:(c# Task 的几种创建方法)