'await'运算符只能在异步 lambda 表达式中使用



我有一个c#Windows应用商店应用程序。当单击另一个MessageDialog中的一个命令按钮时,我正试图启动一个MessageDialog。这样做的目的是警告用户他们的内容未保存,如果他们单击"取消",将提示他们使用单独的保存对话框进行保存。

这是我的";showCloseDialog";功能:

private async Task showCloseDialog()
{
  if (b_editedSinceSave)
  {
    var messageDialog = new MessageDialog("Unsaved work! Close anyway?"
                                            , "Confirmation Message");
    messageDialog.Commands.Add(new UICommand("Yes", (command) =>
    {
      // close document
      editor.Document.SetText(TextSetOptions.None, "");
    }));
    messageDialog.Commands.Add(new UICommand("No", (command) =>
    {
      // save document
      await showSaveDialog();
    }));
    messageDialog.DefaultCommandIndex = 1;
    await messageDialog.ShowAsync();
  }
}

在VS中,我得到一个编译器错误:

"await"运算符只能在异步lambda表达式中使用。请考虑使用"async"修饰符`标记此lambda表达式

该方法用await标记。如果我在showSaveDialog之前从中删除await,它会编译(并工作),但我收到一个警告,我真的应该使用await

如何在此上下文中使用await

您必须将lambda表达式标记为async,如下所示:

messageDialog.Commands.Add(new UICommand("No", async (command) =>
{
    await showSaveDialog();
}));

在我的情况下,我需要在异步foreach中调用一个异步方法。解决方案是这样的:

await list.ForEachAsync(async item =>
{
    IEnumerable<Object> data = await _repository.Get();
});

最新更新