C# 阻塞调用或异步方法内的等待异步调用

问题描述 投票:0回答:1

这两个片段中 methodX() 的执行是否不同?
SemaphoreSlim _locker .Wait() 和 WaitAsync() 只是具有同步和异步版本的相同方法的示例。

答:

SemaphoreSlim _locker = new SemaphoreSlim(1);
async Task methodX()
{
   _locker.Wait();
   // .. rest of the code
}

乙:

SemaphoreSlim _locker = new SemaphoreSlim(1);
async Task methodX()
{
   await _locker.WaitAsync();
   // .. rest of the code
}
c# async-await
1个回答
1
投票

从逻辑上讲,两者都会做同样的事情。仅查看该进程,两者都会在等待指令上阻塞其执行。 不同之处在于,异步版本将允许其他进程在您等待时使用您的计算资源,而同步版本将仅使用您的计算资源来等待。

在大多数情况下,最好尽可能使用异步版本。

© www.soinside.com 2019 - 2024. All rights reserved.