假设我有
void MethodBoth(IEnumerable<int> a){
Method1(a);
Method2(a);
}
Method1
和Method2
同时在foreach
上拨打a
。
此处的问题是,a
会在传递给Method2
时重新创建。有没有办法让两种方法同时运行?
假设
a
的第i个条目将独立于任何外部值。a
太大而无法转换为列表而且太贵而无法获得两次。 Method1
或Method2
。答案 0 :(得分:4)
根据评论中的建议,您可以使用线程和同步来实现此目的:
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
作为生产者消费者切换点。