繁体   English   中英

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

[英]Why not use a sync method instead of await Async task?

异步方法:

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

public async Task AsyncTask1(){
    //Async logic here
}

同步方法:

public void Main(){
    SyncMethod1();
    DoSomething();
}

我想我在这里遗漏了一些东西。 假设SyncMethod1()Asynctask1()都做同样的事情,这两个构造到底是不是结果相同,即DoSomething()在方法完成之前不会启动?

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

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

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

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

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

在你概述的情况下,没有实际的区别,因为你暂时等待异步方法完成,然后继续下一步。

但是,如果您重新构建类似这样的代码,您可能会意识到异步编程的强大功能:

public async void Main() {
    Task performTask = AsyncTask1();
    //This method can continue without having to wait for AsyncTask1 to complete
    DoSomething();
    //Here we await the AsyncTask1 because perhaps other code further 
    //down is depending on it
    await performTask;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM