【发布时间】:2020-12-28 16:18:33
【问题描述】:
这是我的场景: 我们有一个库,它在一个类中有一个“MethodA”,它使用 C# HttpClient 进行 http 调用并检索队列中的所有通知。我们正在使用 .NET Core 3.1。我想在同一个库中添加另一个类,它将在预定的时间间隔调用这个“MethodA”。我在我的测试应用程序中使用了 Task.Run 和 Task.Delay 来实现这一点,并且它可以工作。唯一的问题是这是一个 I/O 绑定调用,而不是 CPU 绑定操作,Stephen Cleary 建议避免在 I/O 绑定调用here 上使用 Task.Run。 我怎样才能做到这一点?
谢谢, 萨尔
【问题讨论】:
-
您可以考虑使用
Timer类。 -
发布您的代码。你不需要
Task.Run来使用Task.Delay,await Task.Delay(...)就足够了。你描述的可能是一对线,例如while(true){ var result=await client.GetStringAsync();....; await Task.Delay(delay); }。如果你已经把你所有的代码放在MethodA你可以写while(true){ await MethodA(); await Task.Delay(..); }
标签: c# async-await polling