任务本地<T>Class?
TaskLocal<T> Class?
我们希望将 TPL 添加到流程的特定部分,这些流程较长 运行,并且可以拆分为并发子流程。我们现在 运行 遇到的核心问题是我们当前的代码依赖于非线程安全的 EntityFramework 6.1 DbContext。我花了一些时间深入研究 TPL 及其内部运作。看起来我们不能使用 ThreadLocal,因为任务 can/will 在其整个生命周期中都有多个线程 运行 (如果我理解正确的话)并且执行任务最终将与多个 ThreadLocal 实例交互.
我的下一个想法是一个 TaskLocal 对象,它可以在任务的整个生命周期中存储 DbContext(从而将它与 运行 具有相同代码的其他并发任务完全分开 - 每个都有自己对应的TaskLocal).
在 this thread 中提到了类似的东西,但它不提供任何代码或 link 代码。
这可能吗?另外,到目前为止,我对 TPL 的理解是否正确?
实际上,.NET 已经有了一个:AsyncLocal<T>
class.
看来这就是你想要的。
我们希望将 TPL 添加到流程的特定部分,这些流程较长 运行,并且可以拆分为并发子流程。我们现在 运行 遇到的核心问题是我们当前的代码依赖于非线程安全的 EntityFramework 6.1 DbContext。我花了一些时间深入研究 TPL 及其内部运作。看起来我们不能使用 ThreadLocal,因为任务 can/will 在其整个生命周期中都有多个线程 运行 (如果我理解正确的话)并且执行任务最终将与多个 ThreadLocal 实例交互.
我的下一个想法是一个 TaskLocal 对象,它可以在任务的整个生命周期中存储 DbContext(从而将它与 运行 具有相同代码的其他并发任务完全分开 - 每个都有自己对应的TaskLocal).
在 this thread 中提到了类似的东西,但它不提供任何代码或 link 代码。
这可能吗?另外,到目前为止,我对 TPL 的理解是否正确?
实际上,.NET 已经有了一个:AsyncLocal<T>
class.
看来这就是你想要的。