C# System.Threading.Timer,异步/等待卡在重复中

C# System.Threading.Timer,异步/等待卡在重复中,c#,asynchronous,timer,C#,Asynchronous,Timer,我想安排每分钟执行一个函数。此方法调用异步函数,该函数是HttpWebRequest。我正在使用异步/等待策略: var timer=new System.Threading.timer(异步(e)=> { RSSClient rss=新的RSSClient(listBoxRSS); RSSNotification n=等待rss.fetch(); // ... 控制台。写线(“勾号”); },空,0,5000); 控制台打印“勾号”,但仅打印一次。似乎计时器因某种原因卡住了 删除异步/等待代

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

var timer=new System.Threading.timer(异步(e)=>
{
RSSClient rss=新的RSSClient(listBoxRSS);
RSSNotification n=等待rss.fetch();
// ...
控制台。写线(“勾号”);
},空,0,5000);
控制台打印“勾号”,但仅打印一次。似乎计时器因某种原因卡住了

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

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);

您是否尝试将
try/catch
放入计时器代码中?可能它会在后续调用中引发异常。