- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
所以我在多线程环境中工作,我不想一直使用 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/
有什么方法(可能是肮脏的 hack)来创建一个只使用指定数组而不是复制它的 ImmutableArray? 我有一个我知道不会改变的数组,我想创建一个 ImmutableArray 以允许客户端安全地
为什么 ImmutableArray Microsoft Immutable Collections NuGet 包版本中似乎没有 1.0.34 ? 最佳答案 ImmutableArray不存在于您的
我有一个带有静态成员的内部静态类 MyLists: internal static ImmutableArray MyList = new ImmutableArray { "asd", "q
所以我在多线程环境中工作,我不想一直使用 ImmutableArray,因为它是线程安全的。 不幸的是,ImmutableArray 实现线程不安全接口(interface),因此 LINQ 中的 S
我正在尝试对现有的 ImmutableArray 进行切片在一种方法中,我认为我可以使用构造方法 Create(ImmutableArray a, int offset, int count)像这样:
我在 ImmutableArray<> 中遇到了一个看起来很奇怪的错误(使用 BCL 不可变集合 v1.0.12.0,运行时 .NET 4.5): 我在同一命名空间下的同一源文件中有以下两个完全相同的
假设我有如下方法: unsafe void Convert(byte* ptr, int length) { var span = new Span(ptr, length); var
ImmutableArray 之间有什么区别?和 ImmutableList ,最好在哪里使用它们? 最佳答案 以下是一些可能有助于解释的读物:Please welcome ImmutableArra
当我尝试隐式转换时出现此错误: Cannot implicitly convert type 'System.Array' to 'System.Collections.Immutable.Immut
问题 我在两个相应的 dll 中有以下代码。 dll1 依赖于 dll2。 当 DoWork()被调用它将执行 myInterface.MyListMethod(ImmutableList.Empty
我是一名优秀的程序员,十分优秀!