gpt4 book ai didi

c# - 带有异步/等待的 System.Threading.Timer 卡在重复中

转载 作者:太空狗 更新时间:2023-10-29 21:12:34 26 4
gpt4 key购买 nike

我想安排一个函数每分钟执行一次。此方法调用一个异步函数,它是一个 HttpWebRequest。我正在使用异步/等待策略:

var timer = new System.Threading.Timer(async (e) =>
{
RSSClient rss = new RSSClient(listBoxRSS);
RSSNotification n = await rss.fetch();
// ...
Console.WriteLine("Tick");
}, null, 0, 5000);

控制台打印“Tick”,但只打印一次。似乎计时器由于某种原因卡住了。

删除异步/等待代码后,计时器工作正常:

var timer = new System.Threading.Timer((e) =>
{
Console.WriteLine("Tick");
}, null, 0, 5000);

为什么它不重复,我如何使用 System.Threading.Timer 实现异步/等待策略?

最佳答案

正如 Darin Dimitrov 所指出的,异步方法内部存在一个异常,出于某种原因,该异常未显示在调试器中,但可以使用 try/catch 捕获。

以下使用 async/await 的代码工作正常:

var timer = new System.Threading.Timer(async (e) =>
{
await Task.Delay(500);
Console.WriteLine("Tick");
}, null, 0, 5000);

关于c# - 带有异步/等待的 System.Threading.Timer 卡在重复中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29591102/

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