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

标签 c# multithreading linq

所以我在多线程环境中工作,我不想一直使用 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/

相关文章:

c# - 摄氏度符号 "Â"之前的奇怪字符 "°C"

c# - 如何为 Office 加载项启用身份验证?

c# - Entity Framework - 只更新不为空的值

c# - 在 LINQ 中选择不同的行

vb.net - 当按列排序可能不同时,使用 LINQ 对 DataTable 进行排序

c# - 用 JavaScript 编写的 Cookie 未在代码隐藏中读取

c# - 用于发送电子邮件的 C# Windows 服务中的内存泄漏

multithreading - Scheme中的线程和延续之间的交互作用的信息和示例?

java - 请解释 Thread run() 和 start() 方法的输出

python - 使用 Python3 在 AWS lambda 中进行多线程处理