我想实践手动依赖注入(没有框架),以消除我的代码中的紧耦合。这只是为了练习 - 我没有具体的实现。并行处理的依赖注入
到目前为止简单的构造函数注入工作正常。
但是,我不能解决如何创建一个紧密耦合,当一个类必须使用并行循环内的另一个。例如:
public class Processor
{
private IWorker worker;
public Processor(IWorker worker)
{
this.worker = worker;
}
public List<string> DoStuff()
{
var list = new List<string>();
for (int i = 0; i < 10; i++)
{
list.Add(worker.GetString());
}
return list;
}
public List<string> DoStuffInParallel()
{
var list = new System.Collections.Concurrent.ConcurrentBag<string>();
Parallel.For(0, 10, i =>
{
//is there any trivial way to avoid this??
list.Add(new Worker().GetString());
});
return list.ToList();
}
}
public class Worker : IWorker
{
public string GetString()
{
//pretend this relies on some instance variable, so it not threadsafe
return "a string";
}
}
避免明显的事实,即一个平行环路会比在上述情况下的标准循环慢,我怎么能写Processor.DoStuffInParallel()
方法,以避免对Worker
类的当前硬依赖?脱钩这一
相关:https://stackoverflow.com/questions/13982600/using-dependencies-on-multiple-threads-with-parallel-foreach – Steven