线程,BackgroundWorker或Task,由同一方法处理的众多对象

时间:2014-05-29 19:31:18

标签: c# multithreading task-parallel-library backgroundworker

我有一个需要处理的T对象列表,为了加快这个列表的处理速度,它们将被用于异步处理。每个对象都使用相同的方法处理,因此我对各种异步策略有几个问题:

  1. BackgroundWorker或Task(TPL)更受欢迎吗?
  2. 我说的是,无论选择哪种方法,BackgroundWorker或Task对象列表都需要实例化一个包含处理T的方法的新类?换句话说,如果ClassA正在创建BackgroundWorker或Task对象,那么它们不应该都指向ClassA.ProcessObject(T t),而是实例化新的ClassB()。ProcessObject(T t)作为执行工作的方法?

1 个答案:

答案 0 :(得分:1)

您可以自由使用您想要完成任务的任何工具。它们两个不可互换,因为它们有一些不同(虽然重叠)的设计目标。您更喜欢的是我们无法回答的问题。

是否希望所有worker都执行对象的同一实例或不同实例的方法完全依赖于上下文。只要您了解各个线程是否在同一个实例上运行,并且相应地编写代码,这两者本身都不是错误的。在适当的情况下,两者都可以完全接受。这一切都取决于您是否想要各种线程共享状态,以及该给定状态是否专门设计为从多个线程访问。