繁体   English   中英

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

[英]The 'await' operator can only be used within an async lambda expression

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

这是我的“showCloseDialog”function:

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 表达式中使用。 考虑用“异步”修饰符标记这个 lambda 表达式

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

在这种情况下如何使用await

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM