[英]Async method in an ASP.NET Web Form
我必須在 ASP.NET web forms 應用程序中使用第三方庫。
我必須使用的第三方方法是異步方法。
由於我必須在頁面點擊事件處理程序中調用它,我有 2 個選項:
第一個問題
僅為此方法聲明所有網站頁面異步是否有意義(可能可以在每個頁面上調用)?
第二個問題
第二個問題是關於同步調用異步方法。
必須調用以下方法
async Task<bool> MyMethodAsync()
{
...
}
接下來的 3 次調用之間有什么區別?
Task.Run(async () => await MyMethodAsync()).GetAwaiter().GetResult();
Task.Run(() => MyMethodAsync()).GetAwaiter().GetResult();
MyMethodAsync().GetAwaiter().GetResult();
我在執行過程中看不到任何區別……
謝謝!
Task.Run(async () => await MyMethodAsync()).GetAwaiter().GetResult();
這將啟動一個任務以在異步運行該方法的線程池線程上運行。 然后主線程坐在那里等待線程池線程任務完成。
Task.Run(() => MyMethodAsync()).GetAwaiter().GetResult();
這與上面相同,但主要 function 在方法完全完成之前“繼續”。
MyMethodAsync().GetAwaiter().GetResult();
這至少避免了使用額外的線程來停止主線程。
編輯:我沒有看到這個問題:
僅為此方法聲明所有網站頁面異步是否有意義(可能可以在每個頁面上調用)?
取決於什么樣的async
。 如果他們仍然返回 void,那么您將一無所獲,您只是在破壞您的代碼庫。 如果您要返回實際的Task
,那么可以確定。 事實上,這就是 ASP.Net Core 的工作方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.