C# Task学习

启动

两种启动方式

Task task1=new Task(()=>{
    System.Console.WriteLine("我是Task1");
});
task1.Start();

Task task2=Task.Factory.StartNew(()=>{
    System.Console.WriteLine("直接输出Task2");
});

生命周期

 Task task1=new Task(()=>{
    System.Console.WriteLine("开始线程");
    System.Threading.Thread.Sleep(2000);
    System.Console.WriteLine("结束线程");
});
System.Console.WriteLine("开始之前状态"+task1.Status);
task1.Start();
System.Console.WriteLine("开始之时状态"+task1.Status);
task1.Wait();
System.Console.WriteLine("结束之后状态"+task1.Status);

执行之后,结果如下

开始之前状态Created
开始之时状态WaitingToRun
开始线程
结束线程
结束之后状态RanToCompletion

等待任意一个执行任务完成

Task task1=new Task(()=>{
    System.Console.WriteLine("开始1线程");
    System.Threading.Thread.Sleep(2000);
    System.Console.WriteLine("结束1线程");
});
Task task2=new Task(()=>{
    System.Console.WriteLine("开始2线程");
    System.Threading.Thread.Sleep(3000);
    System.Console.WriteLine("结束2线程");
});
task1.Start();
task2.Start();
Task.WaitAny(task1,task2);
System.Console.WriteLine("结束");

结果:

开始2线程
开始1线程
结束1线程
结束

任务回调

执行完Task任务之后回调的函数

Task task1=new Task(()=>{
    System.Console.WriteLine("开始1线程");
    System.Threading.Thread.Sleep(2000);
    System.Console.WriteLine("结束1线程");
});
task1.Start();
var result=task1.ContinueWith<string>(task =>{
    return "task1回调方法";
});

System.Console.WriteLine(result.Result.ToString());

结果:

开始1线程
结束1线程
task1回调方法

猜你喜欢

转载自www.cnblogs.com/yunquan/p/11222591.html