在不影响用户体验的情况下有效地收集数据并将其传输到服务需要在单独的线程上定期执行方法。 虽然 C# 的 Timer
类提供定期方法执行,但其参数要求可能与异步方法不一致。
此示例演示了在没有 Timer
参数约束的情况下调用异步方法:
<code class="language-csharp">public async Task PeriodicFooAsync(TimeSpan interval, CancellationToken cancellationToken) { while (!cancellationToken.IsCancellationRequested) { await FooAsync(); await Task.Delay(interval, cancellationToken); } }</code>
这里:
PeriodicFooAsync
反复呼叫FooAsync
。interval
设置执行之间的延迟。cancellationToken
允许受控终止。 这对于正常关闭至关重要。虽然在一般 .NET 应用程序中有效,但此方法需要在 ASP.NET 中仔细考虑。 不受控制的“即发即忘”异步操作可能会产生问题。 对于强大的 ASP.NET 解决方案,请研究 Hangfire 等库或参考 Stephen Cleary 的“ASP.NET 上的 Fire and Forget”和 Scott Hanselman 的“如何在 ASP.NET 中运行后台任务”等资源以获得最佳实践。
以上是如何在 C# 中定期启动异步方法而不阻止用户请求?的详细内容。更多信息请关注PHP中文网其他相关文章!