其他分享
首页 > 其他分享> > 嵌套任务调用,无需异步/等待

嵌套任务调用,无需异步/等待

作者:互联网

这与以下帖子有关:Why use Async/await all the way down

我很好奇在以下情况下会发生什么:

由于评论已更新:

async Task FooAsync()
{
    await Func1();
    // do other stuff
}

Task Func1()
{
    return Func2();
}

async Task Func2()
{
    await tcpClient.SendAsync();
    // do other stuff
}

这整个过程会成为阻塞呼叫吗?还是因为实际上正在等待Func1(),所以UI可以继续工作?最终是否有必要在Func1()上添加async / await?我玩过它,但实际上并没有发现任何区别,因此是个问题.任何见解都会很棒,谢谢!

解决方法:

异步和等待只是编译器功能.

不等待调用异步方法将导致它执行同步(阻塞)方式.

当您编写await时,以下所有代码都由编译器自动包装在Task.ContinueWith()方法中,这意味着当任务完成时,下面的代码将在以后执行

public async Task<int> method2(){
  return Task.FromResult(1);
}

public void method1(){
  await method2()
  Console.WriteLine("Done");
}

将翻译如下:

  public Task<int> method2(){
      return Task.FromResult(1);
    }

    public void method1(){
      method2().ContinueWith(x => {
        Console.WriteLine("Done");
      });
    }

标签:asynchronous,async-await,c
来源: https://codeday.me/bug/20191118/2032216.html