我有这个代码:
private async void ContextMenuForGroupRightTapped(object sender, RightTappedRoutedEventArgs args) { CheckBox ckbx = null; if (sender is CheckBox) { ckbx = sender as CheckBox; } if (null == ckbx) { return; } string groupName = ckbx.Content.ToString(); var contextMenu = new PopupMenu(); // Add a command to edit the current Group contextMenu.Commands.Add(new UICommand("Edit this Group", (contextMenuCmd) => { Frame.Navigate(typeof(LocationGroupCreator), groupName); })); // Add a command to delete the current Group contextMenu.Commands.Add(new UICommand("Delete this Group", (contextMenuCmd) => { SQLiteUtils slu = new SQLiteUtils(); slu.DeleteGroupAsync(groupName); // this line raises Resharper's hackles, but appending await raises err msg. Where should the "async" be? })); // Show the context menu at the position the image was right-clicked await contextMenu.ShowAsync(args.GetPosition(this)); }
… Resharper 的检查抱怨说,“ 因为没有等待此调用,所以在调用完成之前继续执行当前方法。考虑将 ‘await’ 运算符应用于调用结果 ”(与评论)。
所以,我在它前面加上了一个“await”,但是,当然,我还需要在某个地方添加一个“async”——但是在哪里呢?
要标记 lambda 异步,只需async在其参数列表之前添加:
async
// Add a command to delete the current Group contextMenu.Commands.Add(new UICommand("Delete this Group", async (contextMenuCmd) => { SQLiteUtils slu = new SQLiteUtils(); await slu.DeleteGroupAsync(groupName); }));