一、创建Task
方式1:
Task t1 = new Task(() => {
//To Do you code 也可以在这直接调用方法,直接传递参数,也比较方便
});
t1.Start();
Task.WaitAll(t1);//等待所有任务结束
注:
任务的状态:
Start之前为:Created
Start之后为:WaitingToRun
方式2:
Task.Run(() => {
//To Do you code 也可以在这直接调用方法,直接传递参数,也比较方便
});
方式3:
Task.Factory.StartNew(() => {
//To Do you code 也可以在这直接调用方法,直接传递参数,也比较方便
}); 直接异步的方法
或者
Task t3=Task.Factory.StartNew(() => {
//To Do you code 也可以在这直接调用方法,直接传递参数,也比较方便
});
t3.Start();
Task.WaitAll(t3);//等待所有任务结束
注:
任务的状态:
Start之前为:Running
Start之后为:Running
方式4:
带返回值的方式
Task task = CreateTask(“Task 1”);
task.Start();
int result = task.Result;
三、Task的任务控制
1、Task.Wait
在上个例子中,我们已经使用过了,task1.Wait();就是等待任务执行完成,我们可以看到最后task1的状态变为Completed。
2、Task.WaitAll
看字面意思就知道,就是等待所有的任务都执行完成,下面我们来写一段代码演示一下:
static void Main(string[] args)
{
var task1 = new Task(() =>
{
Console.WriteLine(“Task 1 Begin”);
System.Threading.Thread.Sleep(2000);
Console.WriteLine(“Task 1 Finish”);
});
var task2 = new Task(() =>
{
Console.WriteLine(“Task 2 Begin”);
System.Threading.Thread.Sleep(3000);
Console.WriteLine(“Task 2 Finish”);
});
task1.Start();
task2.Start();
Task.WaitAll(task1, task2);
Console.WriteLine("All task finished!");
Console.Read();
}
3、Task.WaitAny
这个用发同Task.WaitAll,就是等待任何一个任务完成就继续向下执行,将上面的代码WaitAll替换为WaitAny,输出结果如下:
4、Task.ContinueWith
就是在第一个Task完成后自动启动下一个Task,实现Task的延续,下面我们来看下他的用法,编写如下代码:
static void Main(string[] args)
{
var task1 = new Task(() =>
{
Console.WriteLine(“Task 1 Begin”);
System.Threading.Thread.Sleep(2000);
Console.WriteLine(“Task 1 Finish”);
});
var task2 = new Task(() =>
{
Console.WriteLine(“Task 2 Begin”);
System.Threading.Thread.Sleep(3000);
Console.WriteLine(“Task 2 Finish”);
});
task1.Start();
task2.Start();
var result = task1.ContinueWith<string&