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

时间:2013-12-15 10:27:37

标签: c# lambda modal-dialog windows-store-apps async-await

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

这是我的“showCloseDialog”函数:

private async Task showCloseDialog()
{
    if (b_editedSinceSave)
    {
        var messageDialog = new MessageDialog("Unsaved work detected. 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

1 个答案:

答案 0 :(得分:80)

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

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