我想使用任务并行库在Silverlight 5.0应用程序中实现以下内容(SL5 有任务工厂但没有 Parallel.For)。我有很多线程知识,但没有关于 TPL 的知识,所以这似乎是一个很好的任务:)
目前我有一些代码,同步执行如下:
public interface IProcessor
{
IEnumerable<Bar> Provide(Foo param)
}
private IEnumerable<IProcessor> processors;
public void DoMultiOperations(Foo param, Action<IEnumerable<Bar>> callback)
{
List<Bar> allResults = new List<Bar>();
foreach(var processor in this.processors)
{
allResults.AddRange(processor.Provide(param));
}
callback(allResults);
}
考虑每个IProcessor
接受一个Foo
参数来Provide
返回一个IEnumerable<Bar>
. 所有结果的聚合通过回调发送回调用者。
现在一些 IProcessor 立即执行。有些人调用服务器,可能需要几秒钟。我想为 NIProcessor
个实例安排 N 个任务,并在所有任务都完成(或超时)时连接IEnumerable<Bar>
结果。
如果可能的话,我想为整个操作添加一个超时,所以如果所有操作都没有在 15 秒内完成,请抛出。
非常感谢您的帮助:)