如何映射ImmutableArray而不将其转换为IEnumerable,这不是线程安全的
本文关键字:IEnumerable 转换 这不是 安全 线程 何映射 映射 ImmutableArray | 更新日期: 2023-09-27 18:17:13
所以我在多线程环境中工作,我不想一直使用ImmutableArray,因为它是线程安全的。
不幸的是,ImmutableArray实现了线程不安全的接口,所以从LINQ中选择方法返回IEnumerable。
这样,我的线程安全变量就变成了线程不安全。我如何从ImmutableArray映射到ImmutableArray?
这个问题的背后似乎有很多误解。您需要查看Select
方法的源代码,并了解yield
关键字。
第二,LINQ方法的寿命很短。有不同的线程执行不同的处理任务。您是否正在使用管道情况,希望在一个线程中转换数据并将结果传递给另一个线程?在这种情况下,你必须小心yield
关键字;从本质上讲,您需要在将集合传递给下一个线程之前刷新(呃,实现,因为没有更好的词),以便在当前线程中完成实际工作。在这种情况下,对象所有权开始发挥作用,您不需要线程安全的集合。
简而言之,在ImmutableArray
上调用Select
返回的可枚举对象是完全线程安全的。你可以在任何点实现它,它不会给你任何错误。当然,它只会迭代调用Select
时集合中包含的数据。它不会知道任何新分配的实例