【发布时间】:2018-03-29 07:31:01
【问题描述】:
我喜欢线程,但我在 Internet 上找不到任何信息(也许我只是不知道如何正确搜索)关于后台发生的事情,例如在舞台上线程饥饿。操作系统如何处理它?我的线程是在排队等待获得在线程池中创建的机会,还是在无法创建的 xy 时间后被杀死?还是完全不同的东西?
另一个问题是我为什么要关心线程上下文?通过调用ConfigureAwait(false),我知道我不会等待可以翻译为“我不关心那个上下文”的线程上下文。据我所知,致电ConfigureAwait(false) 我正在处理死锁。
最后一个问题是,当死锁发生时,后台发生了什么?主线程是否尝试捕获该上下文或其他内容?
【问题讨论】:
-
"我为什么要关心线程上下文?" - 因为有时在同一个线程上继续很重要。思考:UI 线程。
-
但据我了解(这可能是错误的),ConfigureAwait 默认为 true,这意味着我可能会遇到任何人都不想要的死锁。但是如果我将其设置为 false,我将处理死锁,这意味着我不会等待新创建线程的上下文。
-
是的,所以?我要说的是,在某些情况下,上下文很重要,因此你应该关心。
-
你能解释一下我应该关心上下文和不应该关心上下文的情况吗?如果我理解正确的话,当我将一些任务返回到主(UI)线程时,我应该关心上下文,而当我做一些不应该在主(UI)线程上返回的事情时,我不应该关心?如果你想关心上下文,如果你设置 false 为 ConfigureAwait,你如何避免主线程死锁?
-
也许 google Stephen C's blog 以及他对这些话题的看法。
标签: c# multithreading asynchronous