Анонимные методы - 3 разных способа - асинхронный - PullRequest
2 голосов
/ 02 марта 2020

Не был уверен, что писать в заголовке, они могут не все быть анонимными методами, но здесь идет речь:

Скажем, у нас есть эта функция asyn c:

public async Task Delete(){  
  //something
}

I Я использую Blazor на стороне сервера, и мне интересно узнать о следующих четырех способах вызова функции. Допустим, они находятся внутри тега div.

  1. onclick="@Delete"

  2. onclick="@(() => Delete(id))"

  3. onclick="@(async () => await Delete(id))"

  4. onclick="@(e => Delete(person.Id))

Я не уверен, является ли 1 новым для Blazor или нет, но понимает ли это, что метод asyn c или нет?

2 и 3 использовались бы, если бы было необходимо передать параметр, но я никогда раньше не использовал asyn c -часть, только в старых постах. Нужно ли еще говорить "async () =>"?

1 Ответ

5 голосов
/ 02 марта 2020

В ранних версиях Blazor вы должны были использовать опцию 3, потому что функции async не поддерживались. Если вы пропустили await, у Blazor не было возможности узнать, что метод завершен, поэтому вам нужно было вручную вызвать StateHasChanged, чтобы компонент мог быть повторно обработан при необходимости.

Однако теперь Blazor делает Поддержка асинхронных c методов, так что вы можете придерживаться опции 1, с оговоркой, что вам нужен метод для возврата Task, а не void.

Так что вам нужно что-то вроде этого:

public async Task Delete(){  
  //something
}

А в Блазоре:

onclick="@Delete"
...