如何映射 ImmutableArray 而不将其强制转换为非线程安全的 IEnumerable?

dit*_*lav 4 c# linq multithreading

所以我在多线程环境中工作,我不想一直使用 ImmutableArray,因为它是线程安全的。

不幸的是,ImmutableArray 实现了线程不安全的接口,因此 LINQ 的 Select 方法返回 IEnumerable。

这样,我的线程安全变量就变成了线程不安全的。如何从 ImmutableArray 映射到 ImmutableArray?

Bra*_*non 5

这个问题的背后似乎有很多误解。您需要查看该Select方法的源代码并了解yield关键字。

其次,LINQ 方法的生命周期很短。您有各种线程执行各种处理任务。您是否正在使用管道情况,您希望在一个线程中转换数据并将结果传递给另一个线程?yield在这种情况下,您必须小心使用关键字;本质上,您需要在将集合传递给下一个线程之前刷新(呃,意识到,因为缺少更好的词)您的集合,以便在当前线程中完成实际工作。在这种情况下,对象所有权开始生效,您不需要线程安全的集合。

总之,从枚举调用返回SelectImmutableArray是完全线程安全的。你可以在任何时候意识到它,它不会给你任何错误。当然,它只会遍历您调用时集合中包含的数据Select。它对新分配的实例一无所知。