C# 任务并行库是否提供了共享开放连接的方法? 背景

C# 任务并行库是否提供了共享开放连接的方法? 背景,c#,c#-4.0,task-parallel-library,dynamics-crm-2011,C#,C# 4.0,Task Parallel Library,Dynamics Crm 2011,我有一项服务正在连接到Microsoft CRM 2011,并更新数以万计的记录。在我们的开发环境中,单线程运行它只会在一分钟内更新30条记录。我使用TPL Parallel.Inovke切换到多线程,但是到CRM的连接不是线程安全的,因此我为正在处理的每个记录创建了一个新的连接。这一变化只将我的吞吐量增加到每分钟60条记录。然后我返回并将记录批处理在一起,这样每个线程将打开一个连接,然后一次处理1000条记录。这将我的吞吐量提高到每分钟500次左右。我可以继续沿着这条路径,并尝试根据线程数微调

我有一项服务正在连接到Microsoft CRM 2011,并更新数以万计的记录。在我们的开发环境中,单线程运行它只会在一分钟内更新30条记录。我使用TPL Parallel.Inovke切换到多线程,但是到CRM的连接不是线程安全的,因此我为正在处理的每个记录创建了一个新的连接。这一变化只将我的吞吐量增加到每分钟60条记录。然后我返回并将记录批处理在一起,这样每个线程将打开一个连接,然后一次处理1000条记录。这将我的吞吐量提高到每分钟500次左右。我可以继续沿着这条路径,并尝试根据线程数微调批处理的大小,但真正的解决方案是执行某种连接池,这样每个线程都有自己的连接

如何执行连接池?
TPL是否提供了一种将对象从正在完成的动作传递到将要处理的下一个动作的方法?如果没有,是否有一个很好的例子说明如何编写自己的连接池类?

我认为在TPL中没有类似的东西,提供连接池不是它的工作


但是一种方法是使用支持线程本地初始化的连接。

那么在线程初始化中创建连接?如何管理该连接的作用域?一旦操作完成,线程将只处理下一个操作,还是将创建一个新线程?一旦一个操作完成,另一个操作将在同一线程上以相同的连接启动。