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

ror*_*yok 52 c# lambda modal-dialog async-await windows-store-apps

我有一个ac #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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

该方法标有await.如果我await从showSaveDialog之前删除它,它编译(并工作),但我得到一个警告,我真的应该使用await

我如何await在这种情况下使用?

Bor*_*kov 89

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

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