2016-11-29 89 views
0

我有一個電話應用程序。當屏幕顯示我啓動一個定時器是這樣的:異步方法無法返回無效 - 我該如何處理?

base.OnAppearing(); 
{ 
    timerRunning = true; 
    Device.BeginInvokeOnMainThread(() => showGridTime(5)); 
} 
async void showGridTime(int time) 
{ 
    while (timerRunning) 
    { 
     var tokenSource = new CancellationTokenSource(); 
     await Task.Delay(time, tokenSource.Token); 
     detailGrid.IsVisible = true; 
    } 
} 

的代碼似乎工作,但沒有在IDE中說,異步方法不能返回null警告消息。

鑑於此代碼有人可以幫助,並給我建議我應該返回什麼,如果我以正確的方式去解決這個問題?

+1

只是*不*返回無效。返回'任務'。 –

+0

[異步/等待 - 何時返回一個任務與無效?]可能的重複(http://stackoverflow.com/questions/12144077/async-await-when-to-return-a-task-vs-void) –

回答

4

只返回一個任務:

async Task ShowGridTimeAsync(int time) 
{ 
    while (timerRunning) 
    { 
     var tokenSource = new CancellationTokenSource(); 
     await Task.Delay(time, tokenSource.Token); 
     detailGrid.IsVisible = true; 
    } 
} 

這是需要有當它完成了這個方法的調用者知道並採取相應的行動。

不建議創建async void方法,除非您創建事件或強制執行此操作以符合接口簽名。