【发布时间】:2011-05-24 03:28:52
【问题描述】:
我按照这些思路设置了一组结构良好的对象:
abstract class Data
{
public abstract void GetData();
public abstract void Process();
}
abstract class DataSource1 : Data
{
public void GetData() { ... }
}
class DataSource1ProcessorA : DataSource1
{
public void Process() { ... }
}
abstract class DataSource2 : Data
{
public void GetData() { ... }
}
class DataSource2ProcessorA : DataSource2
{
public void Process() { ... }
}
class DataSource2ProcessorB : DataSource2
{
public void Process() { ... }
}
目前,我正在按顺序处理每个 DataSourceProcessor,随着我们添加更多的源和处理器,这开始变得越来越长。每个源都完全不相关,但每个处理器都需要按顺序运行。所以我需要一个转身的方法
new List<List<Data>> tasks = new List<List<Data>>()
{
new List<Data>() { new DataSource1ProcessorA() },
new List<Data>() { new DataSource2ProcessorA(), new DataSource2ProcessorB() }
}
foreach (List<Data> source in tasks)
{
foreach(Data data in source)
{
data.GetData();
data.Process();
}
}
分成一系列任务。我以前使用过 Tasks,虽然我没有对它们做过任何真正复杂的事情,而且我只是不知道如何通过任意顺序调用序列来触发任意数量的任务。
除了启动它们并报告它们抛出的任何错误之外,我不需要以任何方式访问任务。最好是 DataSource2ProcessorA 中的错误不应阻止 DataSource2ProcessorB 运行,但如果编码更容易允许一个错误杀死整个 DataSource 的线程,我可以忍受。
【问题讨论】:
标签: c# .net-4.0 task-parallel-library