所以我在多线程环境中工作,我不想一直使用ImmutableArray,因为它是线程安全的。
不幸的是,ImmutableArray实现了线程不安全的接口,因此LINQ的Select方法返回IEnumerable。
这样,我的线程安全变量变得线程不安全。 如何从ImmutableArray映射到ImmutableArray?
答案 0 :(得分:3)
这个问题背后似乎存在很多误解。您需要查看Select
方法的源代码,并了解yield
关键字。
其次,LINQ方法是短暂的。您有各种线程执行各种处理任务。您是否正在使用管道情况,您想在一个线程中转换数据并将结果传递给另一个线程?在这种情况下,您必须小心使用yield
关键字;实质上,你需要在将它们传递给下一个线程之前刷新(呃,实现,因为缺少一个更好的词)你的集合,以便在当前线程中完成实际的工作。在这种情况下,对象所有权启动,您不需要线程安全的集合。
简而言之,在Select
上调用ImmutableArray
返回的可枚举是完全线程安全的。您可以随时实现它,它不会给您任何错误。当然,它只会在您调用Select
时迭代您的集合中包含的数据。它对新分配的实例一无所知。