现在async await在core这样写都不会死锁。而framework还是会的。看了
Stephen Cleary的文章和synchronizationcontext的解释没看的怎么明白。详细想知道的是:
1.synchronizationcontext承担一个什么角色,同步上下文具体是怎么操作线程的,为什么可有可无?【framework中可配置移除<add key="aspnet:UseTaskFriendlySynchronizationContext" value="false" />】
2.为什么core中要移除synchronizationcontext,那么又是怎么保证线程间的同步的?
严重不同意“现在async await在core随便写都不会死锁”,血的教训告诉我们在 asp.net core 中如果在同步方法中调用 async 异步方法,死锁会更厉害,会锁住整个线程池, 详见 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)
dudu大神 我看了你的文章。把问题修改了。 看了Don't Block on Async Code 里面也说明:加上ConfigureAwait(false)那么去操作线程池,但文章中没有说明再core中只说了下asp.net情况下。 如果core的环境下,同步方法中调用异步方法wait直接锁死线程池。 那么我在问题中的图片代码为啥可以执行。。。。
我漏看了你说的“这个问题在 Liunx 上很容易出现,而在 Windows 上需要一定的并发请求才会出现。” 我发到linux上试下
@TeemoHQ: 对于“synchronizationcontext承担一个什么角色”,参考园子里的一篇博文 线程之间的通讯---SynchronizationContext:
简而言之就是允许一个线程和另外一个线程进行通讯,SynchronizationContext在通讯中充当传输者的角色。
@TeemoHQ: linux测试怎么样?是很快就会死锁吗?