1
|
Dejan Scott Dorman · 技术社区 · 9 年前 |
1
1
这是因为 deferred execution . 和 how chained queries in Linq work . 如果您将其更改为最简单的情况
您将看到: 步骤1 步骤2 步骤3 步骤1 步骤2 步骤3 ... ... 现在想象一下,如果你的假设是正确的:
First Select()在上运行
你想的流程是:
然后
等等。
作为一种优化,当Linq检测到您有一个select后跟
尝试运行简化版本:
您将看到步骤1和步骤2按“顺序”进行,但每个迭代都在不同的线程上完成。 但是,AsSequential()将在执行它的主线程上运行。 因此,我希望第1步和第2步 在不同于调用线程的同一线程上运行 但步骤3在启动链的同一线程上运行。 如果要实现所描述的行为,只需将查询更改为:
第一个ToList()求值将在调用线程上运行所有内容,然后AsParallel()在不同的线程上运行每个迭代(取决于ThreadPool的可用性),最后,AsSequential将确保顺序位在调用线程中运行。 |
Robert King · Unity C#语法问题-转换位置 1 年前 |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
i_sniff_ket · 在unity之外使用unity类 2 年前 |