一个收集器和多个发生器的多任务模式

时间:2013-09-23 07:34:12

标签: c# .net design-patterns multitasking

环境:.NET 4.0 C#

我有多个正在运行的生成器异步。它们生成IResult对象,检查通用条件并将结果推送到共享集合。发电机必须支持取消和进度报告。

这是一个伪代码:

private Dictionary<string, IResult> resiltCollection;
private ICriteria criteria;
private bool isCanceled;

// Multiple Running Generators
private GeneratingAsync(ICriteria criteria)
{
    while (!isCanceled)
    {
        IResult result = GenerateResultAsync();
        if (CheckCriteria(result, criteria))
            OnResultAvalable(this, new ResultEventArgs(result));
        OnProgressChanged(this, new ProgressEventArgs(...));
    }
}

private void OnResultAvalable(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)
{
    ...
}

在我目前的项目中,我使用了一个用BackGroundWorker实现的Generator。我的问题是用于多个异步生成器的模式:

  • 我读过有关观察者设计模式的内容,但MS推荐它用于一个生成器和多个观察者,这不是我的情况。
  • 活动模式
  • 反应性扩展
  • ...

另外,我可以使用几个BackGroundWorkers,还是最好使用任务?

编辑:

resiltCollection更好:ConcurrentDictionary或Dictionarry具有正确锁定的AddResult()GetResult()方法。

0 个答案:

没有答案