所以我在多线程环境中工作,我不想一直使用 ImmutableArray,因为它是线程安全的。
不幸的是,ImmutableArray 实现线程不安全接口(interface),因此 LINQ 中的 Select 方法返回 IEnumerable。
这样,我的线程安全变量就变成了线程不安全的。 如何从 ImmutableArray 映射到 ImmutableArray?
最佳答案
看来这个问题背后有很多误解。您需要查看Select
方法的源代码并了解yield
关键字。
其次,LINQ 方法的生命周期很短。您有各种线程执行各种处理任务。您是否正在使用管道情况,您希望在一个线程中转换数据并将结果传递给另一个线程?在这种情况下,您必须小心使用 yield
关键字;本质上,您需要在将集合传递到下一个线程之前刷新(呃,意识到,没有更好的词)您的集合,以便在当前线程中完成实际工作。在这种情况下,对象所有权开始发挥作用,您不需要线程安全的集合。
简而言之,在 ImmutableArray
上调用 Select
返回的可枚举是完全线程安全的。你可以随时意识到它,它不会给你任何错误。当然,它只会循环访问您调用 Select
时集合中包含的数据。它对新分配的实例一无所知。
关于c# - 如何映射 ImmutableArray 而不将其强制转换为非线程安全的 IEnumerable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40528185/