ホームページ > バックエンド開発 > C++ > ASP.NET Core で非同期タスクを再帰的にスケジュールするにはどうすればよいですか?

ASP.NET Core で非同期タスクを再帰的にスケジュールするにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-26 10:56:09
オリジナル
665 人が閲覧しました

How to Recursively Schedule Async Tasks in ASP.NET Core?

ASP.NET Core での定期的な非同期タスクの実装

ASP.NET Core アプリケーションでは、多くの場合、ユーザーの要求に影響を与えることなく、バックグラウンド タスクを定期的に実行する必要があります。 この記事では、JavaScript の setInterval().

に似た、反復的な非同期タスクを作成するためのソリューションを検討します。

課題:

目標は、ユーザーの操作をブロックすることなく、非同期メソッド (収集したデータをリモート サービスに送信するなど) を定期的に実行することです。 難しいのは、この非同期タスクを適切にスケジュールすることです。

簡単な解決策 (注意事項あり):

.NET の Timer クラスは、Elapsed イベントを使用して、簡単なアプローチを提供します。 ただし、必要な署名 (void MethodName(object e, ElapsedEventArgs args)) は、async メソッドの署名 (async Task MethodName(object e, ElapsedEventArgs args)) と互換性がありません。

Task.Delay() を使用した回避策:

この非互換性は、内部的にタイマーを利用する while ループと Task.Delay() を使用して克服できます。

<code class="language-csharp">public async Task PeriodicFooAsync(TimeSpan interval, CancellationToken cancellationToken)
{
    while (!cancellationToken.IsCancellationRequested)
    {
        await FooAsync();
        await Task.Delay(interval, cancellationToken);
    }
}</code>
ログイン後にコピー

これにより、指定された FooAsync()interval が事実上実行されます。 重要な追加点は cancellationToken です。これにより、タスクの正常な終了が可能になります。これは、アプリケーションのシャットダウン時に特に重要です。

ASP.NET Core に関する重要な考慮事項:

このアプローチは一般的な .NET アプリケーションでは機能しますが、ASP.NET Core 内では注意が必要です。 このメソッドの「ファイアアンドフォーゲット」の性質により、問題が発生する可能性があります。 ASP.NET Core で堅牢なバックグラウンド タスクを管理するには、Hangfire などの確立されたソリューション、または Stephen Cleary の「Fire and Forget on ASP.NET」や Scott Hanselman の「ASP.NET でバックグラウンド タスクを実行する方法」で詳しく説明されている手法を検討してください。 これらのリソースは、ASP.NET Core 環境内で長時間実行または非同期のバックグラウンド プロセスを処理するための、より洗練された信頼性の高い方法を提供します。

以上がASP.NET Core で非同期タスクを再帰的にスケジュールするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート