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中文網其他相關文章!