我有一个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();
});