C# 一个采集器和多个生成器的多任务模式
环境:.NET 4.0 C# 我有多个异步运行的发电机。它们生成C# 一个采集器和多个生成器的多任务模式,c#,.net,design-patterns,multitasking,C#,.net,Design Patterns,Multitasking,环境:.NET 4.0 C# 我有多个异步运行的发电机。它们生成IResult对象,检查公共条件并将结果推送到共享集合。生成器必须支持取消和进度报告 下面是一个伪代码: private Dictionary<string, IResult> resultCollection; private ICriteria criteria; private bool isCancelled; // Multiple Running Generators private GeneratingA
IResult
对象,检查公共条件并将结果推送到共享集合。生成器必须支持取消和进度报告
下面是一个伪代码:
private Dictionary<string, IResult> resultCollection;
private ICriteria criteria;
private bool isCancelled;
// Multiple Running Generators
private GeneratingAsync(ICriteria criteria)
{
while (!isCancelled)
{
IResult result = GenerateResultAsync();
if (CheckCriteria(result, criteria))
OnResultAvailable(this, new ResultEventArgs(result));
OnProgressChanged(this, new ProgressEventArgs(...));
}
}
private void OnResultAvailable(object sender, ResultEventArgs e)
{
// Push result object
if(!resiltCollection.Contains(e.Id))
resiltCollection.Add(e.Id, e.Result)
...
}
private void OnProgressChanged(object sender, ProgressEventArgs e)
{
...
}
私有字典结果集合;
私人ICriteria标准;
取消私人住宅;
//多台运行发电机
专用生成同步(ICriteria标准)
{
而(!已取消)
{
IResult result=GenerateResultAsync();
if(检查标准(结果、标准))
OnResultAvailable(这是新的ResultEventArgs(结果));
OnProgressChanged(这是新的ProgressEventArgs(…);
}
}
private void OnResultAvailable(对象发送方,ResultEventArgs e)
{
//推送结果对象
如果(!resilCollection.Contains(e.Id))
resilCollection.Add(e.Id,e.Result)
...
}
私有void OnProgressChanged(对象发送方,ProgressEventArgs e)
{
...
}
在我当前的项目中,我使用一个用BackGroundWorker实现的生成器。我的问题是多个异步生成器使用什么模式:
- 我读过有关观察者设计模式的文章,但MS建议将其用于一个生成器和多个观察者,这不是我的情况
- 事件模式
- 反应性扩展
什么对
resultCollection
:ConcurrentDictionary或具有正确锁定的AddResult()
和GetResult()
方法的Dictionary更好?我不理解您试图解决的问题。你能更详细地描述一下这个问题,而不是你认为应该如何解决它吗?问题是我必须异步生成多个对象。这些对象必须满足预定义的标准。生成并检查对象后,必须将其存储在集合中。所以我需要几个生成器同时工作,并通过取消和进度报告推送结果。结果收集必须是线程安全的。同样,您描述的是解决方案,而不是问题。你想解决什么问题?(不是你怎么解决的。)@Enigmativity,我想为外汇市场制定交易策略。我不想听起来很难,但这不是真正的问题,它更像是一个标题,而不是一个描述。