首页 > 后端开发 > C++ > 如何在ASP.NET Core中递归安排异步任务?

如何在ASP.NET Core中递归安排异步任务?

Susan Sarandon
发布: 2025-01-26 10:56:09
原创
665 人浏览过

How to Recursively Schedule Async Tasks in ASP.NET Core?

在 ASP.NET Core 中实现重复异步任务

ASP.NET Core 应用程序通常需要定期执行后台任务而不影响用户请求。 本文探讨了一种创建重复异步任务的解决方案,类似于 JavaScript 的 setInterval().

挑战:

目标是定期执行异步方法(例如,将收集的数据发送到远程服务)而不阻止用户交互。 困难在于如何适当地调度这个异步任务。

一个简单的解决方案(带有警告):

.NET 的 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,可以正常终止任务,这在应用程序关闭期间尤其重要。

ASP.NET Core 的重要注意事项:

虽然在一般 .NET 应用程序中有效,但此方法在 ASP.NET Core 中需要谨慎。 这种方法的“一劳永逸”性质可能会导致问题。 为了在 ASP.NET Core 中实现强大的后台任务管理,请考虑使用 Hangfire 等成熟的解决方案,或者 Stephen Cleary 的“ASP.NET 上的 Fire and Forget”和 Scott Hanselman 的“如何在 ASP.NET 中运行后台任务”中详细介绍的技术。 这些资源提供了更复杂、更可靠的方法来处理 ASP.NET Core 环境中长时间运行或异步后台进程。

以上是如何在ASP.NET Core中递归安排异步任务?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板