一般我們在開發Windows Store App 、 Windows Phone 、其他應用程式時會使用try{} catch{}來確保某段程式碼發生例外情況時整個程式不會崩潰調,所以try{} catch{}是常常會用到的程式碼;隨著C#的演進非同步也越來越好寫只要利用async Tack await就可以創造非同步的方法,可是怎麼就無法將await的方法放在catch{}裡了呢?!
本篇文章將引導您學會catch中無法使用await的替代方案。
一般我們在開發Windows Store App 、 Windows Phone 、其他應用程式時會使用try{} catch{}來確保某段程式碼發生例外情況時整個程式不會崩潰調,所以try{} catch{}是常常會用到的程式碼;隨著C#的演進非同步也越來越好寫只要利用async Tack await就可以創造非同步的方法,可是怎麼就無法將await的方法放在catch{}裡了呢?!
本篇文章將引導您學會catch中無法使用await的替代方案。
若我們想要在想要再發生Exception例外狀況時執行await的方法時我們會這樣寫:
1: public async void Initial() {
2: string str = "qq";
3: try {
4: //該段程式碼無法將qq轉換為int整數,所以一定會發生catch
5: int i = int.Parse(str);
6:
7: }
8: catch {
9:
10: await GetInfo_1();
11: }
12: }
但是卻會發現這樣是不可行的
Visual Studio 會告訴你 [ Cannot await in the body of a catch clause. ],無法將await放在catch的底下。
該怎麼辦呢其實我們只要腦袋稍微轉個彎,就可以解決囉! 只是要多打幾行程式碼:
1: public async void Initial() {
2: string str = "qq";
3: bool isException = false;//自定義的bool變數用來判斷是否Exception
4: try {
5: //該段程式碼無法將qq轉換為int整數,所以一定會發生catch
6: int i = int.Parse(str);
7:
8: }
9:
10: catch {
11: isException = true;
12:
13: }
14: if (isException)
15: {
16: //若剛才發生Exception則執行await方法
17: await GetInfo_1();
18: }
19: }
自定義個bool的布林變數,若發生Catch時改變不林變數的值,try{} catch{}結束時再用if判斷是判斷是否有發生例外情況,再來做相對應的await方法
如此一來就學會了catch中無法使用await的替代方案囉!!
文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝
轉載請註明出處,並且附上本篇文章網址 ! 感謝。