匿名方法 - 3 种不同方式 - 异步

Tra*_*ack 2 c# methods anonymous-function asp.net-core blazor

不确定在标题中写什么,它们可能不都是匿名方法,但这里是:

假设我们有这个异步函数:

public async Task Delete(){  
  //something
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Blazor 服务器端,我对以下四种调用函数的方式感到好奇。假设它们在 div 标签内。

  1. onclick="@Delete"

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

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

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

我不确定 1 是否是 Blazor 的新手,但它是否理解该方法是异步的?

如果需要传入参数,将使用 2 和 3,但我以前从未使用过 async-part,只在较旧的帖子中看到过。还需要说"async () =>"吗?

Dav*_*idG 5

在 Blazor 的早期版本中,您需要使用选项 3,因为async不支持函数。如果您错过了await,Blazor 无法知道该方法已完成,因此您需要手动调用,StateHasChanged以便在需要时重新渲染组件。

但是,现在 Blazor 确实支持异步方法,因此您可以坚持使用选项 1,但需要注意的是,您需要返回方法Task而不是void.

所以你需要这样的东西:

public async Task Delete(){  
  //something
}
Run Code Online (Sandbox Code Playgroud)

在 Blazor 中:

onclick="@Delete"
Run Code Online (Sandbox Code Playgroud)