。
setInterval()
>目標是定期執行異步方法(例如,將收集的數據發送到遠程服務)而不阻止用戶交互。 困難在於適當地安排這項異步任務。
> 一個簡單的解決方案(帶有警告):> .net's類,使用其
>事件提供了一種簡單的方法。 但是,所需的簽名()與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
>一般功能性.NET應用程序,此方法需要在ASP.NET核心內謹慎。 這種方法的“火和攻擊”性質可能會導致問題。 對於ASP.NET核心中強大的背景任務管理,請考慮諸如Hangfire之類的已建立解決方案或Stephen Cleary的“ Fire and Losed on Asp.net上”中詳細介紹的技術,以及Scott Hanselman的“如何在ASP.NET中運行背景任務”。 這些資源提供了更複雜和可靠的方法來處理ASP.NET核心環境中的長期運行或異步背景過程。
以上是如何在 ASP.NET Core 中遞歸調度非同步任務?的詳細內容。更多資訊請關注PHP中文網其他相關文章!