簡體   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