假设我有这个代码
ThreadPool.QueueUserWorkItem(unused =>
{
SynchronizationContext.SetSynchronizationContext(
new MyCustomSynchronizationContext());
// not reset back to null
}, null);
当前同步上下文泄漏回线程池。如果有人再次调用 ThreadPool.QueueUserWorkItem 并且使用同一个线程来处理另一个工作项,那么该线程的当前同步上下文会被重置回 null 还是会保持 MyCustomSynchronizationContext?
相同的答案是否适用于在线程池上执行任务的任何其他方式,例如 Task.Run、BeginInvoke 等?
我知道通常 TLS 不会重置,但 .NET 源代码显示当前同步上下文的存储不是很明确定义(大部分时间它来自执行上下文,但对于某些 WinRT 来说似乎是特殊情况原因)。