强迫Linq不要延迟执行

Cli*_*rce 18 c# linq delayed-execution

事实上,这是与这篇文章相同的问题:

如何在我的DAL中调用时确保我的LINQ查询执行,而不是以延迟的方式执行?

但由于他没有解释为什么他想要它,这个问题似乎已经过了一段时间.这是我类似但更好解释的问题:

我有两种类型的线程(暂时忽略UI线程).有一个"数据收集"线程类型和一个"计算"线程类型.数据收集线程很慢.从各个地方筛选出相当多的数据.计算线程相对较快.到目前为止,设计模型是发送数据收集线程以查找数据,并在完成时将数据传递给计算.

当我在Linq编写数据采集时,我将一些缓慢的内容提升回计算线程.现在有数据元素在计算过程中使用之前没有完全解析 - 这是一个问题.

我想迫使Linq在一定时间内完成工作(声明结束?方法结束?"请完成,该死的"方法调用)以便我知道我以后不会付钱.将".ToList()"添加到Linq的末尾是1.尴尬,并且2.感觉就像拳击即将在另一个线程中暂时取消装箱的东西.

Jon*_*eet 24

你不会拳击任何东西 - 你将缓冲结果.

ToList()如果你真的想要数据,使用基本上是要走的路.除非你准备好立即使用数据,否则它必须在某处缓冲,不是吗?列表只是一种方便的方法.

另一种方法是进行处理,然后在那里进行处理 - 急切地使用数据.我并没有完全遵循不同的线程方面,因此我不清楚这是否会对你有所帮助,但就我所见,这些基本上是你可以选择的.

这在您的描述中实际上有些明确:

到目前为止,设计模型是发送数据收集线程以查找数据,并在完成时将数据传递给计算.

调用ToList()基本上会改变你从"一个可以在被要求时获取数据的查询"返回到"数据本身,缓冲在列表中"的查询.


Jar*_*Par 7

你能解释一下为什么.ToList不被接受吗?你提到拳击和拆箱但这些是完全不相关的主题.

迫使LINQ查询按需完成的一部分需要存储结果.否则,为了再次查看结果,您必须重新处理查询..ToList通过将元素存储在a中有效地实现了这一点List<T>.

可以将元素存储在几乎任何其他集合样式的数据结构中,并进行各种权衡,以更好地满足您的需求.