代码之家  ›  专栏  ›  技术社区  ›  Apahdos

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

  •  0
  • Apahdos  · 技术社区  · 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#方法中编写以下内容时,我会收到一条警告(“因为此调用不是awaitet,所以方法的执行会在…之前继续”):

    Task task = new Task(() => DoSomethingAsync(inputValue));
    
    1 回复  |  直到 1 年前
        1
  •  0
  •   MrC aka Shaun Curtis    1 年前

    @bind:after 希望您返回a Task? .

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

    第二个例子虽然有效,但过于夸张,将异步方法封装在匿名异步方法中。

    您还可以向返回null @绑定:之后 。但是,在完成并呈现组件之前,它不会等待处理程序。