首頁 >後端開發 >C++ >如何在 ASP.NET MVC 中正確處理「即發即忘」非同步方法?

如何在 ASP.NET MVC 中正確處理「即發即忘」非同步方法?

DDD
DDD原創
2025-01-12 19:26:43404瀏覽

How to Properly Handle Fire-and-Forget Async Methods in ASP.NET MVC?

管理 ASP.NET MVC 控制器中的即發即忘非同步操作

非同步「即發即忘」方法,例如DeleteFooAsync,在非同步程式設計中經常遇到。雖然傳統建議是在這些情況下避免 async/await,但當同步副本不可用時,這可能不切實際。

簡單地使用 TaskScheduler.UnobservedTaskException 處理未觀察到的異常是不可靠的,因為可能會出現同步上下文問題。

將非同步方法包裝在 try-catch 區塊中,如下所示,可以解決異常問題,但對於許多方法來說很麻煩:

<code class="language-csharp">private async void DeleteFooWrapperAsync()
{
    try
    {
        await DeleteFooAsync();
    }
    catch (Exception exception)
    {
        m_log.Error("DeleteFooAsync failed: " + exception.ToString());
    }
}</code>

ASP.NET MVC 控制器中的「即發即忘」呼叫最強大的解決方案是使用 Task.Run:

<code class="language-csharp">Task foo = Task.Run(() => DeleteFooAsync());</code>

這會將非同步操作卸載到單獨的線程,防止其阻塞回應並確保可靠執行。

以上是如何在 ASP.NET MVC 中正確處理「即發即忘」非同步方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn