首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何映射ImmutableArray而不将其转换为线程安全的IEnumerable?

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

Stack Overflow用户
提问于 2016-11-10 12:55:13
回答 1查看 442关注 0票数 4

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-10 15:28:43

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

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

简而言之,在Select上调用ImmutableArray返回的可枚举线程是完全安全的。你可以在任何时候意识到这一点,它不会给你带来任何错误。当然,它只会迭代在调用Select时包含在集合中的数据。它不会知道任何关于新分配的实例的信息。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40528185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档