Igo*_*tis 18 .net c# deadlock asynchronous async-await
我有这个纯粹同步的库.它暴露了同步方法,我有客户端使用它.
对于想要使用它的人,我将底层实现更改为异步和公开的异步方法.但现在我有很多复制代码.异步代码似乎表现更好.我希望现有客户能够利用它,我想消除代码重复.
有没有安全的方法来保持同步签名和调用异步实现?
在打电话时我特别害怕死锁.Result和.Wait.
Yuv*_*kov 19
我强烈鼓励你不要这样做
首先,读取我应该为异步方法公开同步包装器吗?和我应该揭露异步包装器同步的方法呢?作者:Stephan Toub.
我不这样做的主要原因:
同步异步 - 如你所说,死锁.调用链中的更高或更低,使用Result
或Wait
异步可能是有风险的业务.这实际上取决于您运行的平台(ASP.NET,UI,控制台),因为每个平台的行为都有所不同(即使使用时ConfigureAwait(false)
)
异步同步 - 可扩展性.一旦我看到异步端点,我认为它是纯粹的异步,对我来说,因为API的消费者意味着没有任何线程在"我背后"旋转.如果您的用户假设相同,则发现每次调用异步方法时,使用线程池线程会在尝试向外扩展时严重损害性能.如果用户想要使用a包装同步方法Task.Run
,请将其留给他们进行调用,并判断他们将如何影响他们的应用程序