在 C# Web 应用程序中实现定期安排的异步操作
C# Web 开发中的一个常见挑战涉及定期将累积的数据发送到外部服务。 为了防止阻塞用户请求,开发人员需要一种机制来在单独的线程中按设定的时间间隔执行异步方法。
虽然 Timer
类提供了一种简单的定时执行方法,但其签名并不直接与异步方法兼容。 更有效的解决方案是利用 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
参数指定的时间间隔重复调用 TimeSpan
。 包含 CancellationToken
对于优雅地终止循环至关重要,特别是在 ASP.NET 中,其中不受控制的后台任务可能会产生问题。
为了在 ASP.NET 应用程序中实现强大的后台任务管理,请考虑使用 Hangfire 等专用库,或实施 Stephen Cleary 的“ASP.NET 上的 Fire and Forget”和 Scott Hanselman 的“如何在 ASP 中运行后台任务”等资源中概述的策略。 。网”。 这些提供了更复杂的方法来处理长时间运行或潜在破坏性的后台进程。
以上是如何在不阻止用户请求的情况下定期运行C#中的异步方法?的详细内容。更多信息请关注PHP中文网其他相关文章!