国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

AsyncConsolePrograms異步控制臺程序

2019-11-14 13:57:02
字體:
來源:轉載
供稿:網友

如果你正在寫一個控制臺程序,你可能最終想要一個異步的main方法,像這樣:

class PRogram{  static async void Main(string[] args)  {    ...  }}

很不幸,那個沒用(實際上,VS 11 編譯器拒絕異步Main方法)。我的這篇博客《Async and Await 異步和等待》里講過,當異步方法完成后會返回到它的調用者。雖然這在UI應用(方法僅僅返回到UI事件循環)和asp.net(方法脫離線程返回但請求還是活著的【在生命周期內】)中運行很完美,但在控制臺程序中不會工作得這么好:因為Main返回到操作系統,因此你的程序退出了。

你可以通過提供你自己的兼容異步上下文來變通一下。AsyncContext(異步上下文)是通用的上下文,它用來啟用異步的MainAsync:

class Program{  static int Main(string[] args)  {    try    {      return AsyncContext.Run(() => MainAsync(args));    }    catch (Exception ex)    {      Console.Error.WriteLine(ex);      return -1;    }  }  static async Task<int> MainAsync(string[] args)  {    ...  }}

以下為一個較為常見的問題,望園友們注意!

問:關于使用".Wait()"來等待一個來自非異步的Main方法的異步方法,推薦使用AsyncContext嗎?

答:在Main方法中要么使用AsyncContext,要么使用GetAwaiter().GetResult()。GetAwaiter().GetResult()本質上和Wait()一樣,但是它沒有把異常封裝在AggregateException中。

AsyncContext在主控制臺線程中裝配了一個真實的單線程上下文。GetAwaiter().GetResult()將自由上下文默認保留在控制臺應用中。如果我在寫一個概念證明型的代碼,并且最終在ASP.NET或者UI應用(具有單線程上下文)中終止,我通常就會使用AsyncContext;如果我在寫一個真實的控制臺應用,我可以任選一種方式。

 



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涟水县| 大名县| 弥渡县| 佛山市| 霍林郭勒市| 蒙山县| 五寨县| 新平| 和顺县| 江源县| 府谷县| 平湖市| 方正县| 凤冈县| 太仓市| 喜德县| 抚宁县| 云霄县| 尉犁县| 崇礼县| 和平县| 马尔康县| 肥城市| 河南省| 衡阳市| 庆元县| 渭源县| 沾益县| 江孜县| 黄梅县| 乌审旗| 文登市| 若尔盖县| 湛江市| 新龙县| 莎车县| 贵定县| 巴彦淖尔市| 石棉县| 上饶市| 宣城市|