绑定单行 lambda 表达式。调用异步Task方法时是否需要异步?

问题描述 投票:0回答:1

假设我有一个异步方法:

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));
    
lambda async-await blazor razor-pages
1个回答
0
投票

@bind:after

 希望您返回 
Task?

这就是您在第一个示例中所做的,因此它可以编译。 这是将值传递到被调用处理程序时使用的正常模式。

第二个示例可以工作,但太过分了,将异步方法包装在匿名异步方法中。

您也可以退回

void

。如果该方法是同步的,它将在最终组件渲染之前运行完成。  但它会产生,如 
async void
 所示,然后 UI 处理程序运行完成,并在方法完成之前呈现组件 [没有返回的任务供 UI 处理程序等待]。

仅对同步方法使用 void 模式。

© www.soinside.com 2019 - 2024. All rights reserved.