![](/img/trans.png)
[英]The 'await' operator can only be used within an async lambda expression error
[英]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.