环境:.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。我的问题是用于多个异步生成器的模式:
另外,我可以使用几个BackGroundWorkers,还是最好使用任务?
编辑:
对resiltCollection
更好:ConcurrentDictionary或Dictionarry具有正确锁定的AddResult()
和GetResult()
方法。