为什么不使用同步方法而不是等待异步任务?

Nza*_*all 5 c# asynchronous

异步方法:

public void Main(){
    await Asynctask1;
    DoSomething();
}

public async Task AsyncTask1(){
    //Async logic here
}
Run Code Online (Sandbox Code Playgroud)

同步方法:

public void Main(){
    SyncMethod1();
    DoSomething();
}
Run Code Online (Sandbox Code Playgroud)

我想我在这里遗漏了一些东西.假设SyncMethod1()并且Asynctask1()两者都做同样的事情,这两个构造到底是不是结果相同,即DoSomething()直到方法完成之前才开始?

Ste*_*ary 12

即DoSomething()直到完成之前的方法才开始?

异步顺序之间存在差异.当您总是await立即使用异步方法时,最终会得到异步顺序代码,乍一看它的行为似乎与同步顺序代码类似.(另一方面,这种相似性是async/ await关键字的全部要点).但是,有一个重要的区别.

假设操作是一些I/O事情,比如获取HTTP资源.SyncMethod1会同步进行HTTP获取; 也就是说,它发出HTTP请求然后阻塞线程,直到它获得HTTP响应.AsyncTask1将异步进行HTTP获取; 也就是说,它发出HTTP请求,然后返回一个不完整的Task.稍后,当HTTP请求进入时,该AsyncTask1方法将恢复并完成返回Task,以及await运行后的代码(即DoSomething).

异步方式更复杂,但有一个关键优势:它不会阻塞线程.因此,释放UI线程以启用响应式UI,并释放ASP.NET线程以处理其他请求.

我在我的博客上有一个async介绍,可以帮助你学习.