【发布时间】:2023-03-12 05:11:01
【问题描述】:
假设我有这个代码
ThreadPool.QueueUserWorkItem(unused =>
{
SynchronizationContext.SetSynchronizationContext(
new MyCustomSynchronizationContext());
// not reset back to null
}, null);
当前同步上下文泄漏回线程池。如果有人再次调用 ThreadPool.QueueUserWorkItem 并且使用同一个线程来处理另一个工作项,那么该线程的当前同步上下文会被重置回 null 还是会保持 MyCustomSynchronizationContext?
相同的答案是否适用于在线程池上执行任务的任何其他方式,例如Task.Run、BeginInvoke 等?
我知道一般情况下 TLS 不会重置,但 .NET 源代码显示当前同步上下文的存储不是很明确定义(大部分时间来自执行上下文,但它似乎是特殊情况WinRT 出于某种原因)。
【问题讨论】:
标签: c# asynchronous threadpool async-await synchronizationcontext