假设我有
void MethodBoth(IEnumerable<int> a){
Method1(a);
Method2(a);
}
Method1
和Method2
都在foreach
上调用a
。这里的问题是,传递给
a
时将重新创建Method2
。有没有办法让两种方法同时运行?假设
对于每个i,
a
的第i个条目将独立于任何外部值。除此之外,我不知道如何使用我的方法,因此我认为
a
太大而无法转换为列表,并且太昂贵而无法获得两次。我无法编辑
Method1
或Method2
的内部。 最佳答案
如注释中所建议,您可以使用线程和同步来实现此目的:
var consumer1 = new BlockingCollection<int>(boundedCapacity: 1);
var consumer2 = new BlockingCollection<int>(boundedCapacity: 1);
var task1 = Task.Run(() => Method1(consumer1.GetConsumingEnumerable()));
var task2 = Task.Run(() => Method2(consumer2.GetConsumingEnumerable()));
foreach (var item in sourceCollection) {
consumer1.Add(item);
consumer2.Add(item);
}
consumer1.CompleteAdding();
consumer2.CompleteAdding();
Task.WaitAll(task1, task2);
我正在使用
BlockingCollection
作为生产者消费者交接点。关于c# - 如何在一个IEnumerable上同时运行两个方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38174233/