[英]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.