我第一次尝试使用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 调用,或使用 'await Task.Run(...)' 在后台线程上执行 CPU 密集型工作。
所以我知道我必须等待什么GetAllMessagesAsync()
?但是什么?新功能还必须等待其他async
功能吗?我想不通,我陷入了一个无限循环。