我正在开发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))
。有时候,我也会将匿名的异步/等待函数作为 Action
传递,它可以正常工作。
这样做正确吗?
会有任何副作用吗?
调用一个匿名异步/等待函数的
Action<T>
,是一次异步调用吗?
Action
是一个没有返回值的委托;Func
是一个有返回值的委托。使用哪个委托与特定方法是否异步执行无关。 - Kenneth K.