L’operatore ‘await’ può essere utilizzato solo all’interno di un’espressione lambda asincrona

Ho l’app # Windows Store. Sto cercando di avviare una MessageDialog quando si fa clic su uno dei pulsanti di comando all’interno di un’altra MessageDialog . Il punto è di avvertire l’utente che il loro contenuto non è salvato, e se fa clic su Annulla, chiederà loro di salvare usando una finestra di dialogo di salvataggio separata.

Ecco la mia funzione “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(); } } 

In VS ottengo un errore del compilatore:

L’operatore ‘await’ può essere utilizzato solo all’interno di un’espressione lambda asincrona. Prendi in considerazione di contrassegnare questa espressione lambda con il modificatore ‘asincrono’

Il metodo è contrassegnato con await . Se rimuovo lo stato di await prima di showSaveDialog, compila (e funziona) ma ricevo un avviso che dovrei davvero usare await

Come uso await in questo contesto?

È necessario contrassegnare l’espressione lambda come async , in questo modo:

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