C# での非同期メソッドの定期的な実行
この記事では、非同期メソッドと while
ループを使用して、C# Web アプリケーションからサービスにデータを定期的にパブリッシュするためのソリューションを提供します。
Timer クラスの制限
Timer
クラスは、通常、スケジュールされたタスクに使用され、void MethodName(object e, ElapsedEventArgs args)
で署名されたメソッドを受け入れます。これにより、Web サービスを呼び出す非同期メソッドを実行しようとするときに制限が生じます。
非同期タスクループ
この制限を克服するには、while
ループと Task.Delay
を組み合わせて使用できます。
<code class="language-csharp">public async Task PeriodicFooAsync(TimeSpan interval, CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) // 使用CancellationToken改进 { await FooAsync(); await Task.Delay(interval, cancellationToken); } }</code>
このループは、指定された間隔と提供されたキャンセル トークンを使用して、FooAsync
メソッドを定期的に実行します。ループは、Web アプリケーションからキャンセル トークンを渡すことでいつでも停止できます。
その他の注意事項
ASP.NET アプリケーションの場合、アプリケーションのパフォーマンスに影響を与える可能性のある「起動して忘れる」操作を避けることが重要です。信頼性の高いバックグラウンド タスクを確保するには、HangFire や Quartz.Net などの専用のサービスまたはツールの使用を検討してください。 これにより、タスクはアプリケーションの通常の動作の外で確実に管理され、リソースの競合が回避されます。
以上がC#で定期的に非同期方法を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。