gpt4 book ai didi

c# - 如何同时在一个 IEnumerable 上运行两种方法

转载 作者:行者123 更新时间:2023-11-30 20:35:20 25 4
gpt4 key购买 nike

假设我有

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

其中 Method1Method2 都调用 a 上的 foreach

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

假设

  1. 对于每个 i,a 的第 i 个条目将独立于任何外部值。
  2. 除此之外,我不知道如何使用我的方法,所以我假设 a 太大而无法转换为列表,而且获取两次的成本太高。
  3. 我无法编辑 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com