Подтвердить что ты не робот

Оператор "ожидание" может использоваться только в выражении async lambda

У меня есть приложение для Windows С#. Я пытаюсь запустить MessageDialog, когда нажата одна из кнопок команды внутри другого MessageDialog. Дело в том, чтобы предупредить пользователя о том, что их содержимое несохранено, и если они нажмут кнопку "Отмена", он предложит им сохранить с помощью отдельного диалогового окна сохранения.

Здесь моя функция showCloseDialog:

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 я получаю ошибку компилятора:

Оператор 'wait' может использоваться только в выражении async lambda. Рассмотрите маркировку этого лямбда-выражения с помощью модификатора 'async'

Метод помечен await. Если я удалю await из showSaveDialog, он скомпилирует (и работает), но я получаю предупреждение, что я действительно должен использовать await

Как использовать await в этом контексте?

4b9b3361

Ответ 1

Вы должны отметить свое лямбда-выражение как async, например:

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