假设我有一个异步方法:
private async Task DoSomethingAsync(int value)
{
await Library.SomethingAwesomeAsync(value);
}
现在我有了一个输入控件:
<input type="text" @bind="FancyProperty" @bind:after="() => DoSomethingAsync(inputValue)" />
这并没有给我警告。但我希望我需要写以下内容:
<input type="text" @bind="FancyProperty" @bind:after="async () => await DoSomethingAsync(inputValue)" />
有谁知道为什么这两种方式似乎都有效?
在普通 C# 方法中编写以下内容时,我收到警告(“因为此调用不是等待,所以该方法的执行之前继续......”):
Task task = new Task(() => DoSomethingAsync(inputValue));
@bind:after
希望您返回
Task?
。这就是您在第一个示例中所做的,因此它可以编译。 这是将值传递到被调用处理程序时使用的正常模式。
第二个示例可以工作,但太过分了,将异步方法包装在匿名异步方法中。
您也可以退回
void
。如果该方法是同步的,它将在最终组件渲染之前运行完成。 但它会产生,如
async void
所示,然后 UI 处理程序运行完成,并在方法完成之前呈现组件 [没有返回的任务供 UI 处理程序等待]。仅对同步方法使用 void 模式。