异步执行和同步执行之间的区别是什么?
当前回答
同步是指调用方等待响应或完成,异步是指调用方继续执行并且稍后出现响应(如果适用的话)。
举个例子:
static void Main(string[] args)
{
Console.WriteLine("Before call");
doSomething();
Console.WriteLine("After call");
}
private static void doSomething()
{
Console.WriteLine("In call");
}
这将总是输出:
Before call
In call
After call
但如果我们要使doSomething()异步(有多种方式来做它),那么输出可以变成:
Before call
After call
In call
因为进行异步调用的方法将立即继续执行下一行代码。我之所以说“可能”,是因为异步操作无法保证执行顺序。它也可以作为原始文件执行,这取决于线程计时等。
其他回答
同步执行意味着在单个系列中执行。A - C > B - > - > D。如果您正在调用这些例程,则A将运行,然后结束,然后B将开始,然后结束,然后C将开始,等等。
使用异步执行,你开始一个例程,并让它在后台运行,同时你开始下一个例程,然后在某个时候,说“等待这个完成”。更像是:
开始A->B->C->D->等待A完成
这样做的好处是,当A仍在运行时(在后台,在一个单独的线程上),您可以执行B、C和或D,因此您可以更好地利用资源,减少“挂起”或“等待”。
我认为一个很好的方法是把它看作是一个经典的跑步接力赛
同步:流程就像同一个团队的成员一样,它们直到收到接力棒(前一个流程/运行者执行的结束)才会执行,但它们彼此都是同步的。
异步:在同一接力赛跑道上的不同团队的成员,他们将运行和停止,彼此异步,但在同一场比赛中(整体程序执行)。
这有意义吗?
当执行a>b>c>d>这样的序列时,如果我们在执行过程中遇到如下失败:
a
b
c
fail
然后我们从头开始:
a
b
c
d
这是同步的
然而,如果我们有相同的序列要执行:a>b>c>d>,我们在中间有一个失败:
a
b
c
fail
...但我们不是从头开始,而是从失败的地方重新开始:
c
d
...这就是所谓的异步。
同步是指以队列方式逐一执行任务。假设只有一辆车需要在朋友之间共享才能到达目的地,一辆车将被共享。 在异步情况下,每个朋友都可以租到车并到达目的地。
同步操作在返回调用方之前完成其工作。
异步操作在返回调用方之后完成(大部分或全部)工作。
推荐文章
- 如何使HTTP请求在PHP和不等待响应
- 反应-显示加载屏幕,而DOM是渲染?
- 如何正确地读取异步/等待文件?
- 使用Moq模拟单元测试的异步方法
- 如何使用JUnit来测试异步进程
- Kotlin协程中的启动/连接和异步/等待之间有什么区别
- 如何告诉PowerShell等待每个命令结束后才开始下一个?
- CompletableFuture, Future和RxJava的Observable之间的区别
- 为什么要在c#中使用Task<T>而不是ValueTask<T> ?
- Asyncio。Gather vs asyncio.wait
- 同步调用异步方法
- 所有异步forEach回调完成后的回调
- 并发、并行和异步方法之间的区别是什么?
- 同步调用一个异步Javascript函数
- 异步等待在linq选择