c# expresiones - ¿Dónde marcó una expresión lambda async?




select pdf (2)

Tengo este código:

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));
}

... que la inspección de Resharper se quejó con " Debido a que no se espera esta llamada, la ejecución del método actual continúa antes de que se complete la llamada. Considere aplicar el operador 'esperar' al resultado de la llamada " (en línea con el comentario).

Y entonces, preparé una "espera" para ello, pero, por supuesto, también necesito agregar una "asincrónica" en algún lugar, ¿pero dónde?


Answers

Para marcar una asincrónica lambda, simplemente anteponga async antes de su lista de argumentos:

// 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);
}));

IEnumerable<Customer> filteredList = originalList
  .GroupBy(customer => customer.CustomerId)
  .Select(group => group.First());




c# lambda resharper windows-store-apps async-await