Threading, BackgroundWorker或Task,由同一方法处理的多个对象

本文关键字:处理 对象 方法 BackgroundWorker Task Threading | 更新日期: 2023-09-27 18:05:43

我有一个需要处理的T对象列表,为了加快该列表的处理速度,它们将被外包给异步进程。每个对象都由相同的方法处理,所以我对各种异步策略有几个问题:

  1. 是后台工作或任务(TPL)更可取?
  2. 我是否正确地说,无论选择哪种方法,BackgroundWorker或Task对象的列表都需要实例化一个包含处理T的方法的新类?换句话说,如果ClassA正在创建BackgroundWorker或Task对象,那么它们不应该都指向ClassA。ProcessObject(T T),而是实例化新的ClassB()。ProcessObject(T T)作为完成工作的方法?

Threading, BackgroundWorker或Task,由同一方法处理的多个对象

您可以自由地使用您想要的任何工具来完成任务。它们是不可互换的,因为它们的设计目标有些不同(尽管有重叠)。你喜欢哪一个,我们无法回答。

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