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。さらに、VisualStudioは警告を出します。

この非同期メソッドには「await」演算子がなく、同期的に実行されます。'await'演算子を使用して非ブロッキングAPI呼び出しを待機するか、'await Task.Run(...)'を使用してバックグラウンドスレッドでCPUバウンド作業を実行することを検討してください。

だから私は何かを待たなければならないことを理解していGetAllMessagesAsync()ますか?しかし、何ですか?そして、新しい関数は他のasync関数も待つ必要がありますか?私はそれを理解することができません、私は私の心の中で無限ループに入ります。

4

1 に答える 1

4

直接返すことができますTask

public Task<List<Message>> GetAllMessagesAsync()
{
    return Task.Factory.StartNew(() => _context.Messages.ToList());
}
于 2012-11-12T20:13:18.110 に答える