麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

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;如果我在寫一個真實的控制臺應用,我可以任選一種方式。

 



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久精品视频国产 | 一级一级一级一级毛片 | 羞羞色网站 | 精品久久久久久久久中文字幕 | 激情欧美在线 | 毛片视频大全 | 国产成人午夜高潮毛片 | 黄色网页在线看 | 亚洲码无人客一区二区三区 | 一边吃奶一边摸下娇喘 | 国内精品免费一区二区2001 | 2019天天干夜夜操 | 精品国产一级毛片 | 亚洲成人福利网站 | 蜜桃91麻豆 | 少妇激情视频 | 性欧美xxxx极品摘花 | 久久亚洲成人 | 成年片在线观看 | 在线成人免费观看 | 免费人成年短视频在线观看网站 | 一级毛片在线看 | 国产小视频在线 | 国产精品99一区二区 | h视频免费观看 | 美女黄影院 | 亚a在线| 久久国产精品成人免费网站 | 丰满年轻岳中文字幕一区二区 | 欧美成人精品不卡视频在线观看 | 泰剧19禁啪啪无遮挡大尺度 | 欧美一级片免费在线观看 | 黑人一级片 | 国产亚洲精品成人a | 国产精品久久久久久久亚洲按摩 | 永久免费黄色大片 | 国产一区二区欧美精品 | 国产精品av久久久久久网址 | h色网站免费观看 | 久久17| 九九热精品免费视频 |