lambda回调和直接回调之间的Blazor差异



所以我在试验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方法没有抛出异常,而正常方法抛出了异常。

这两种方法之间有什么区别

它添加了另一个函数,这意味着它在堆栈上引入了另一次调用。

此外,因为这是一个asynclambda,所以它会分配另一个Task实例。

话虽如此,使用前者的性能优势微乎其微。


为了完整性,有第三种选择可以防止使用另一个Task,但仍会导致另一个函数调用:

() => OnClickCallback()

在Blazor中,这是一个非常好的问题。我真的不知道它们的编译方式是否不同,但我想提到一件非常重要的事情:lambda方法可以传递一个变量,而不是与事件相关的普通事件变量。做这样的事情非常有用:

@foreach (var item in SomeCustomList)
{
<p @onclick="async (e) => await OnClickCallback(e, item )">Click me lambda</p>
}

相关内容

  • 没有找到相关文章

最新更新