我们希望将TPL添加到长期运行的流程的特定部分,并且可以将其拆分为并发子流程。这时我们遇到的核心问题是,我们当前的代码取决于不是线程安全的EntityFramework 6.1 DbContext。我花了一些时间研究TPL及其内部工作原理。似乎我们无法使用ThreadLocal,因为Task可以/将在其整个生命周期中运行多个线程(如果我理解正确的话),并且正在执行的任务最终将与多个ThreadLocal实例进行交互。

我对此的下一个想法是一个TaskLocal对象,该对象可以在任务的整个生命周期内存储DbContext(从而将其与运行相同代码的其他并发Task干净地分开-每个都有各自对应的TaskLocal)。

this thread中提到了类似的内容,但是它没有提供任何代码或代码链接。

这可能吗?而且,到目前为止,我对TPL的理解是否正确?

最佳答案

实际上,.NET已经具有一个:AsyncLocal<T>类。
看起来这就是您想要的。

08-05 03:31