2017-03-09 85 views
1

我想出瞭如何使用定時器重複常規方法,並且它工作正常。但是現在我不得不在這個方法裏面使用一些異步方法,所以我不得不使它成爲一個Task而不是一個普通的方法。這是我現在有現在的代碼:如何在定時器內調用異步任務?

public async Task Test() 
{ 
    Timer t = new Timer(5000); 
    t.AutoReset = true; 
    t.Elapsed += new ElapsedEventHandler(OnTimedEvent); 
    t.Start(); 
} 

private async Task OnTimedEvent(Object source, ElapsedEventArgs e) 
{ 

} 

我目前在t.Elapsed +=線得到一個錯誤,因爲沒有任何的await,但如果我添加它,它只是充當如果它是一個正常的FUNC,和給我一個缺少的參數錯誤。我將如何使用這個相同的計時器,但與異步任務?

+3

'OnTimedEvent'是一個事件處理程序。這是允許'async void'的一個例外。將該方法更改爲'async void'並等待其中的異步任務。然而'Test'方法不是異步的。 – Nkosi

+2

另請參閱[1200+](https://stackoverflow.com/search?q=%5Bc%23%5D+async+event+handler)其他已解決此問題的相關問題。 –

回答

2

對於事件處理程序,您可以繼續並使用異步無效返回類型。你的代碼應該是這樣的:

public void Test() 
{ 
    Timer t = new Timer(5000); 
    t.AutoReset = true; 
    t.Elapsed += new ElapsedEventHandler(OnTimedEvent); 
    t.Start(); 
} 

private async void OnTimedEvent(Object source, ElapsedEventArgs e) 
{ 

}