gpt4 book ai didi

c# - 以指定的时间间隔定期运行异步方法

转载 作者:可可西里 更新时间:2023-11-01 07:52:31 24 4
gpt4 key购买 nike

我需要从 C# 网络应用程序向服务发布一些数据。数据本身是在用户使用应用程序时收集的(一种使用统计信息)。我不想在每个用户的请求期间向服务发送数据,我宁愿在应用程序中收集数据,然后在单独的线程中的单个请求中发送所有数据,这不满足用户请求(我的意思是用户不必等待服务处理请求)。为此,我需要一种 JS 的 setInterval 模拟 - 每 X 秒启动一次函数以将所有收集的数据刷新到服务。

我发现 Timer类提供了一些类似的(Elapsed 事件)。但是,这只允许运行该方法一次,但这不是什么大问题。它的主要困难在于它需要签名

void MethodName(object e, ElapsedEventArgs args)

虽然我想启动异步方法,但它会调用网络服务(输入参数不重要):

async Task MethodName(object e, ElapsedEventArgs args)

谁能建议如何解决所描述的任务?任何提示表示赞赏。

最佳答案

async 等价物是一个带有Task.Delaywhile 循环(它在内部使用了一个System.Threading.Timer):

public async Task PeriodicFooAsync(TimeSpan interval, CancellationToken cancellationToken)
{
while (true)
{
await FooAsync();
await Task.Delay(interval, cancellationToken)
}
}

传递 CancellationToken 很重要,这样您就可以在需要时停止该操作(例如,当您关闭应用程序时)。

现在,虽然这通常与 .Net 相关,但在 ASP.Net 中,做任何类型的火后遗忘都是危险的。有几种解决方案(如 HangFire),其中一些记录在 Fire and Forget on ASP.NET by Stephen Cleary 中。其他 How to run Background Tasks in ASP.NET by Scott Hanselman

关于c# - 以指定的时间间隔定期运行异步方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30462079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com