我正在做async / await吗?

时间:2012-11-12 20:02:59

标签: c# task .net-4.5 async-await

我第一次尝试使用asyncawait个关键字,我怀疑我是否正确地执行此操作。

在我的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,但我的数据太小了,我无法弄清楚它是否&# 39;只是我的计算机滞后或真的是DataGrid。而且,Visual Studio会发出警告:

  

这种异步方法缺乏等待&#39;运营商并将运行   同步。考虑使用&#39; await&#39;运营商等待   非阻塞API调用,或等待Task.Run(...)&#39;做CPU限制的工作   在背景上   线程。

所以我明白我必须等待GetAllMessagesAsync()中的某些内容?但是什么?新功能还需要等待其他async功能吗?我无法弄清楚,我在脑海中陷入无限循环。

1 个答案:

答案 0 :(得分:4)

您可以直接返回Task

public Task<List<Message>> GetAllMessagesAsync()
{
    return Task.Factory.StartNew(() => _context.Messages.ToList());
}