ホームページ >バックエンド開発 >C++ >ASP.NET MVC で Fire-and-Forget 非同期メソッドを適切に処理する方法

ASP.NET MVC で Fire-and-Forget 非同期メソッドを適切に処理する方法

DDD
DDDオリジナル
2025-01-12 19:26:43400ブラウズ

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

ASP.NET MVC コントローラーでの Fire-and-Forget 非同期操作の管理

DeleteFooAsync などの非同期「fire-and-forget」メソッドは、非同期プログラミングで頻繁に発生します。従来のアドバイスは、これらのシナリオでは 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 で Fire-and-Forget 非同期メソッドを適切に処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。