我想安排一个每分钟执行的功能。此方法调用异步函数,该函数是HttpWebRequest。我正在使用async / await策略:
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",但只打印一次。似乎计时器因某种原因而卡住了。
删除async / await代码后,计时器工作正常:
var timer = new System.Threading.Timer((e) =>
{
Console.WriteLine("Tick");
}, null, 0, 5000);
为什么不重复,如何使用System.Threading.Timer实现async / await策略?
答案 0 :(得分:9)
正如Darin Dimitrov所指出的,异步方法中有一个异常,由于某种原因,它没有在调试器中显示,但可以使用try / catch捕获。
使用async / await的以下代码可以正常工作:
var timer = new System.Threading.Timer(async (e) =>
{
await Task.Delay(500);
Console.WriteLine("Tick");
}, null, 0, 5000);