簡體   English   中英

ASP.NET Web 表單中的異步方法

[英]Async method in an ASP.NET Web Form

我必須在 ASP.NET web forms 應用程序中使用第三方庫。

我必須使用的第三方方法是異步方法。

由於我必須在頁面點擊事件處理程序中調用它,我有 2 個選項:

  1. 將必須使用此方法的每個頁面聲明為 <%@ Page Async="true"... %>
  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM