异步方法:
public void Main(){
await Asynctask1;
DoSomething();
}
public async Task AsyncTask1(){
//Async logic here
}
同步方式:
public void Main(){
SyncMethod1();
DoSomething();
}
我想我在这里遗漏了一些东西。假设 SyncMethod1()
和 Asynctask1()
都做同样的事情,那么这两个构造最终不是相同的结果,即 DoSomething()
直到前面的方法完成后才开始?
最佳答案
namely that DoSomething() doesn't start until the method before finishes?
异步 和顺序 是有区别的。当您总是立即 await
异步方法时,您最终会得到异步顺序代码,乍一看,它的行为确实与同步顺序代码类似。 (附带说明一下,这种相似性是 async
/await
关键字的全部要点)。但是,有一个重要的区别。
假设操作是一些 I/O 事情,比如获取 HTTP 资源。 SyncMethod1
将同步执行 HTTP 获取;也就是说,它发出 HTTP 请求,然后阻塞线程,直到它获得 HTTP 响应。 AsyncTask1
将异步执行 HTTP 获取;也就是说,它发出 HTTP 请求,然后返回一个不完整的 Task
。之后当HTTP请求进来时,AsyncTask1
方法会恢复并完成返回的Task
,await
之后的代码会运行(即,DoSomething
)。
异步方式更复杂,但有一个关键优势:它不会阻塞线程。因此,UI 线程被释放以启用响应式 UI,ASP.NET 线程被释放以处理其他请求。
我有一个 async
intro在我的博客上,可能对您的学习有所帮助。
关于c# - 为什么不使用同步方法而不是等待异步任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23559215/