C# System.Threading.Timer,异步/等待卡在重复中
我想安排每分钟执行一个函数。此方法调用异步函数,该函数是HttpWebRequest。我正在使用异步/等待策略: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); 控制台打印“勾号”,但仅打印一次。似乎计时器因某种原因卡住了 删除异步/等待代
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
放入计时器代码中?可能它会在后续调用中引发异常。