C# Web アプリケーションでの定期的にスケジュールされた非同期操作の実装
チャレンジ:
多くの C# Web アプリケーションでは、ユーザー リクエストの応答性に影響を与えることなく、使用状況データをリモート サービスに送信するなどのタスクを定期的に実行する必要があります。 これには、JavaScript の setInterval
関数に似たメカニズムが必要ですが、C# の非同期コンテキスト内で行われます。
アプローチ:
Timer
クラスはタイミング メカニズムを提供しますが、その Elapsed
イベント ハンドラーには同期メソッド シグネチャが必要です。 より堅牢で柔軟なソリューションには、while
と組み合わせた Task.Delay()
ループが含まれます:
<code class="language-csharp">public async Task ExecutePeriodicallyAsync(TimeSpan interval, CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { await MyAsyncMethod(); await Task.Delay(interval, cancellationToken); } }</code>
このコードは、指定された MyAsyncMethod()
で interval
を非同期的に呼び出します。 CancellationToken
により、ループを正常に終了できます。
ASP.NET に関する重要な考慮事項:
ASP.NET のコンテキストでは、このタスクを単に開始して忘れる (「ファイア アンド フォーゲット」) ことは強くお勧めできません。 これにより、メモリ リークやアプリケーションの不安定性が発生する可能性があります。 ASP.NET で信頼性の高いバックグラウンド タスク管理を行うには、次の代替手段を検討してください。
以上がC# Web アプリケーションで設定された間隔で非同期メソッドを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。