假设我有

void MethodBoth(IEnumerable<int> a){
  Method1(a);
  Method2(a);
}


Method1Method2都在foreach上调用a

这里的问题是,传递给a时将重新创建Method2。有没有办法让两种方法同时运行?

假设


对于每个i,a的第i个条目将独立于任何外部值。
除此之外,我不知道如何使用我的方法,因此我认为a太大而无法转换为列表,并且太昂贵而无法获得两次。
我无法编辑Method1Method2的内部。

最佳答案

如注释中所建议,您可以使用线程和同步来实现此目的:

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/

10-09 23:54