一些有关于C#8.0异步多线程Task的实验与思考(纯属个人观点)

Task类(类似于线程池)是与thread互补,而非独立的。可以在普通的void类型的语句改写成为Task类型的语句,实现异步方法的改写目的。

1.先创建一个实现Task类任务接口的,或者创建一个Task方法

2.再创建一个方法调用前一个Task任务,并在这个方法中添加async和await

 1 //调用一组aysnc异步
 2 public static Task Ta1Async(int num)
 3 {
 4     num += num;
 5     return Task.CompletedTask;
 6 
 7 }
 8 public static async Task<int> taskd(int x)
 9 {
10    await Ta1Async(x);
11 
12    return x;
13 }
14 
15 static void Write1()
16 {
17     Console.WriteLine(taskd(3).Result);
18 
19 }

Task的delay正确用法

 1 //Task.Delay所执行的线程休眠是与主线程平行的等待,需要加入await来进行顺序执行
 2 static async Task Sleeping()
 3 {
 4     await Task.Delay(2000);
 5     Console.WriteLine("done");
 6 }
 7 
 8 static async void Runing()
 9 {
10     await Sleeping();
11 }

Task顺序实验

 1 static async void Listk()                //初始化主线程
 2 {
 3     Console.WriteLine("start");         //创建主线程的方法
 4     await Task.Delay(3000);         //将一个Task方法放入主线程
 5     Task.Run(()=> Console.WriteLine("end"));    //创建一个与主方法并行的方法
 6 
 7     await Task.Run(() => Console.WriteLine("run"));        //创建一个线程放入主线程序列    
 8 }
 9  static void InDoor()
10  {
11      Task task = new Task(() => Console.WriteLine("task"));
12      task.ConfigureAwait(false);         //使该线程封闭式运行,不与其他线程提交状态,节约线程开销
13  }

 

posted @ 2020-11-20 15:12  我就是coder  阅读(162)  评论(0)    收藏  举报