首页 新闻 会员 周边 捐助

asp.net core 为什么移除synchronizationcontext?

0
悬赏园豆:50 [已解决问题] 解决于 2018-12-29 17:29

现在async await在core这样写都不会死锁。而framework还是会的。看了

Stephen Cleary的文章和synchronizationcontext的解释没看的怎么明白。详细想知道的是:

1.synchronizationcontext承担一个什么角色,同步上下文具体是怎么操作线程的,为什么可有可无?【framework中可配置移除<add key="aspnet:UseTaskFriendlySynchronizationContext" value="false" />】

2.为什么core中要移除synchronizationcontext,那么又是怎么保证线程间的同步的?

TeemoHQ的主页 TeemoHQ | 初学一级 | 园豆:49
提问于:2018-02-22 09:58
< >
分享
最佳答案
0

严重不同意“现在async await在core随便写都不会死锁”,血的教训告诉我们在 asp.net core 中如果在同步方法中调用 async 异步方法,死锁会更厉害,会锁住整个线程池, 详见 又踩.NET Core的坑:在同步方法中调用异步方法Wait时发生死锁(deadlock)

收获园豆:50
dudu | 高人七级 |园豆:30925 | 2018-02-22 10:28

dudu大神 我看了你的文章。把问题修改了。 看了Don't Block on Async Code 里面也说明:加上ConfigureAwait(false)那么去操作线程池,但文章中没有说明再core中只说了下asp.net情况下。 如果core的环境下,同步方法中调用异步方法wait直接锁死线程池。 那么我在问题中的图片代码为啥可以执行。。。。

TeemoHQ | 园豆:49 (初学一级) | 2018-02-22 11:03

我漏看了你说的“这个问题在 Liunx 上很容易出现,而在 Windows 上需要一定的并发请求才会出现。” 我发到linux上试下

TeemoHQ | 园豆:49 (初学一级) | 2018-02-22 11:08

@TeemoHQ: 对于“synchronizationcontext承担一个什么角色”,参考园子里的一篇博文 线程之间的通讯---SynchronizationContext

简而言之就是允许一个线程和另外一个线程进行通讯,SynchronizationContext在通讯中充当传输者的角色。

dudu | 园豆:30925 (高人七级) | 2018-02-22 12:24

@TeemoHQ: linux测试怎么样?是很快就会死锁吗?

refactor | 园豆:192 (初学一级) | 2018-04-04 19:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册