1
我想第一次使用async
和await
關鍵字,我懷疑我是否正確地做了這件事。我在做異步/等待正確嗎?
在我的WPF形式的Loaded
事件中,我使用的方法:
private void MessagesWindowLoaded(object sender, RoutedEventArgs e)
{
DataGridMessagesLoadAsync();
}
,看起來像這樣:
private async void DataGridMessagesLoadAsync()
{
_messages = await _messageService.GetAllMessagesAsync();
dataGridMessages.ItemsSource = _messages;
if (_messages.Count() == 0) return;
dataGridMessages.Columns[6].Visibility = System.Windows.Visibility.Collapsed;
dataGridMessages.Columns[8].Visibility = System.Windows.Visibility.Collapsed;
dataGridMessages.Columns[10].Visibility = System.Windows.Visibility.Collapsed;
dataGridMessages.Columns[11].Visibility = System.Windows.Visibility.Collapsed;
dataGridMessages.Columns[12].Visibility = System.Windows.Visibility.Collapsed;
}
的GetAllMessagesAsync()
看起來是這樣的:
public async Task<List<Message>> GetAllMessagesAsync()
{
return (from m in _context.Messages select m).ToList();
}
我不知道我是否有任何異步 - 好像整個窗口正在等待DataGrid
,但是我的數據太小,我無法弄清楚它是否僅僅是我的電腦滯後或者真的是DataGrid
。更重要的是,Visual Studio中發出警告:
這種異步方法缺乏「等待」運營商和運行 同步。考慮使用'await'操作符來等待 非阻塞API調用,或者'等待Task.Run(...)'在線程的背景 上執行CPU綁定工作 。
所以我明白我將不得不等待GetAllMessagesAsync()
?但是什麼?而新功能將不得不等待一些其他的功能,如async
功能?我無法弄清楚,我在腦海中陷入了一個無限循環。
感謝,現在它是清晰可見的UI不會被阻斷。但是,應該命名爲'GetAllMessagesAsync()'還是'GetAllMessages()'?根據Microsoft提出的命名約定,所有使用'async'關鍵字的方法都應該有這樣的後綴,但是如果沒有這樣的修飾符? – pmichna
@vtvs - 我相信約定是使用Async後綴來返回一個'Task'的方法,'async'的使用是一個實現細節。 – Lee