所以我在试验Blazor,我想了解这两者之间的区别。
<p @onclick="OnClickCallback">Click me normal</p>
<p @onclick="async () => await OnClickCallback()">Click me lambda</p>
@code {
private async Task OnClickCallback()
{
await Task.Delay(500);
}
}
这两种方法有什么不同。幕后发生了什么。我发现EF Core(这是另一个主题(存在一些问题,lambda方法没有抛出异常,而正常方法抛出了异常。
这两种方法之间有什么区别
它添加了另一个函数,这意味着它在堆栈上引入了另一次调用。
此外,因为这是一个async
lambda,所以它会分配另一个Task
实例。
话虽如此,使用前者的性能优势微乎其微。
为了完整性,有第三种选择可以防止使用另一个Task
,但仍会导致另一个函数调用:
() => OnClickCallback()
在Blazor中,这是一个非常好的问题。我真的不知道它们的编译方式是否不同,但我想提到一件非常重要的事情:lambda方法可以传递一个变量,而不是与事件相关的普通事件变量。做这样的事情非常有用:
@foreach (var item in SomeCustomList)
{
<p @onclick="async (e) => await OnClickCallback(e, item )">Click me lambda</p>
}