2015-04-12 158 views
3

我想安排一个功能,每分钟执行一次。这个方法调用一个HttpWebRequest的异步函数。我正在使用异步/等待策略:System.Threading.Timer与异步/等待重复卡住

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

控制台打印“滴答”,但只有一次。看起来定时器由于某种原因卡住了。

取出异步/ AWAIT代码后计时器工作正常,但:

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

为何不重复,我怎么能实现使用System.Threading.Timer异步/ AWAIT策略?

+1

你尝试把'尝试/ catch'你的计时器代码里面?也许它会在随后的调用中抛出异常。 –

回答

5

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

下面的代码使用异步/等待工作正常:

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