Я занимаюсь разработкой на ASP. NET Core Blazor и иногда смотрю на GitHub, чтобы чему-то научиться. Этот вопрос не имеет прямого отношения к Blazor, но я видел, как многие разработчики Blazor делают то, что я собираюсь объяснить.
Я заметил, что некоторые компоненты принимают Action<T>
в качестве параметра, а другие принимают Func<T, Task>
.
/* example */
public class MyComponentA : ComponentBase
{
[Parameter] public Action<T> OnClick {get; set;}
//... other methods
}
public class MyComponentB : ComponentBase
{
[Parameter] public Func<T, Task> OnClickAsync {get; set;}
//... other methods
}
Я понял, что вам следует связать Action<T>
с без асинхронным / ожидающим методом и Func<T, Task>
с асинхронным / методом . Пока все хорошо.
Однако я вижу, что кто-то используется для передачи асинхронной / ожидающей анонимной функции как Action<T>
, например OnClick=@(async (item) => await Foo(item))
. Иногда я передаю анонимную функцию async / await как Action
, и она работает.
Это правильно?
Есть ли какой-либо побочный эффект?
Является ли Action<T>
, который вызывает анонимную асинхронную / ожидающую функцию, асинхронный вызов?