日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

async 和 await 的进阶

發(fā)布時間:2023/12/2 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 async 和 await 的进阶 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

異常的捕獲:

static void Main(string[] args){//繼續(xù)我們的異步編程的使用嘀呀;//關(guān)于主線程是無法捕獲我們子線程中的異常滴滴啊;var t = DoExceptionAsync();t.Wait();Console.WriteLine($"{nameof(t.Status)}: {t.Status}"); //任務(wù)狀態(tài)Console.WriteLine($"{nameof(t.IsCompleted)}: {t.IsCompleted}"); //任務(wù)完成狀態(tài)標(biāo)識Console.WriteLine($"{nameof(t.IsFaulted)}: {t.IsFaulted}"); //任務(wù)是否有未處理的異常標(biāo)識 Console.ReadLine();}private static async Task DoExceptionAsync(){try{await Task.Run(() => { throw new Exception(); });}catch (Exception e){Console.WriteLine($"{nameof(DoExceptionAsync)} 出現(xiàn)異常!,異常時:{e.Message.ToString()}");}}}

?

結(jié)果:

?

也許你有疑問:

但是:因為:任務(wù)沒有被取消,并且異常都已經(jīng)處理完成!

在調(diào)用方法中同步等待任務(wù)

算了,這個太簡單了,有任務(wù)的等待,也有任務(wù)的取消,.......

代碼;

private static void Main(string[] args){var t = CountCharactersAsync("http://www.cnblogs.com/liqingwen/");t.Wait(); //等待任務(wù)結(jié)束Console.WriteLine($"Result is {t.Result}");Console.Read();}/// <summary>/// 統(tǒng)計字符數(shù)量/// </summary>/// <param name="address"></param>/// <returns></returns>private static async Task<int> CountCharactersAsync(string address){var result = await Task.Run(() => new WebClient().DownloadStringTaskAsync(address));return result.Length;}

這里還有我們兩個靜態(tài)的方法:可采用 Task 的兩個靜態(tài)方法 WaitAll() 和 WaitAny() 。

?

private static int time = 0;static void Main(string[] args){var t1 = CountCharactersAsync("http://www.cnblogs.com/liqingwen/",1);var t2 = GetRandomAsyn(2);//Task 還以見數(shù)組地哦;Task<int>[] tasks = new Task<int>[] {t1,t2};Task.WaitAll(tasks);//或則:Task.WaitAny(tasks); Console.WriteLine($"t1.{nameof(t1.IsCompleted)}: {t1.IsCompleted}");Console.WriteLine($"t2.{nameof(t2.IsCompleted)}: {t2.IsCompleted}");Console.ReadLine();}/// <summary>/// 統(tǒng)計字符數(shù)量/// </summary>/// <param name="address"></param>/// <returns></returns>private static async Task<int> CountCharactersAsync(string address,int id){var result = await Task.Run(() => new WebClient().DownloadStringTaskAsync(address));Console.WriteLine($"{id} 已經(jīng)調(diào)用完成");return result.Length;}//獲取一個隨機數(shù)private static async Task<int> GetRandomAsyn(int id){var num = await Task.Run(() =>{time++;Thread.Sleep(time * 100);return new Random().Next();});Console.WriteLine($"{id} 已經(jīng)調(diào)用完成");return num;}}

?

在異步方法中異步等待任務(wù)

繼續(xù)我們的異步編程之路........

class Program{private static int time = 0;static void Main(string[] args){//繼續(xù)我們的異步編程地呀;var t = GetRandomAsync();Console.WriteLine("mian line 1"); //【注意】WhenAll() 異步等待集合內(nèi)的 Task 都完成,不會占用主線程的時間。Console.WriteLine($"Result: {t.Result}"); //但是這里會堵塞id呀;Console.WriteLine("mian line 2");Console.Read();}private static async Task<int> GetRandomAsync(){time++;var t1 = Task.Run(()=>{Thread.Sleep(time* 600);return new Random().Next();});time++;var t2 = Task.Run(() =>{Thread.Sleep(time*600);return new Random().Next();});//這里開啟了兩個異步的任務(wù);await Task.WhenAll(new List<Task<int>>() { t1, t2 }); //【注意】WhenAll() 異步等待集合內(nèi)的 Task 都完成,不會占用主線程的時間。// await Task.WhenAny(new List<Task<int>>() { t1, t2 }); Console.WriteLine($" t1.{nameof(t1.IsCompleted)}: {t1.IsCompleted} ");Console.WriteLine($" t2.{nameof(t2.IsCompleted)}:{t2.IsCompleted } ");return t1.Result + t2.Result; //這個就返回了 我們想要的基本值滴呀; }}

?

結(jié)果:

?

如果該成whenAny的結(jié)果:

?

?

?

?ps:以上結(jié)果是有不確定性呀,你懂滴哦;

?

Task.Delay() 暫停執(zhí)行

?這個其實是Thread.sleep的一種取代方法地呀;

private static void Main(string[] args){Console.WriteLine($"{nameof(Main)} - start.");DoAsync();Console.WriteLine($"{nameof(Main)} - end.");Console.Read();}private static async void DoAsync(){Console.WriteLine($" {nameof(DoAsync)} - start.");await Task.Delay(500);Console.WriteLine($" {nameof(DoAsync)} - end.");}

?

結(jié)果哦:

?

轉(zhuǎn)載于:https://www.cnblogs.com/mc67/p/6256705.html

總結(jié)

以上是生活随笔為你收集整理的async 和 await 的进阶的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。