gpt4 book ai didi

c# - .NET 4 中的线程任务列表

转载 作者:行者123 更新时间:2023-11-30 21:14:41 25 4
gpt4 key购买 nike

我有一组结构良好的对象,这些对象设置如下:

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 的线程,我可以接受。

最佳答案

使用下面的代码在单独的线程上触发每个处理事件并记录错误(或重新抛出异常):

Task.Factory.StartNew(() => { data.GetData(); data.Process(); })
.ContinueWith(t => Logger.Error("An exception occurred while processing. Check the inner exception for details", t.Exception),
TaskContinuationOptions.OnlyOnFaulted);

关于c# - .NET 4 中的线程任务列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6101720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com