Erg,我试图用反射器在BCL中找到这两种方法,但找不到它们.这两个片段有什么不同?

A:

IEnumerable<string> items = ...

Parallel.ForEach(items, item => {
   ...
});

B:

IEnumerable<string> items = ...

foreach (var item in items.AsParallel())
{
   ...
}

使用一种比使用另一种有不同的后果吗?(假设我在这两个示例的方括号主体中所做的任何操作都是线程安全的.)

推荐答案

他们做的是完全不同的事情.

第一个线程接受匿名委托,并针对所有不同的项在该代码上并行运行多个线程.

第二个在这种情况下不是很有用.简而言之,它旨在对多个线程执行查询,并将结果合并,然后再次将其提供给调用线程.所以foreach语句上的代码始终保持在UI线程上.

只有当您在AsParallel()调用右侧的Linq查询中执行一些开销较大的操作时,才有意义,例如:

 var fibonacciNumbers = numbers.AsParallel().Select(n => ComputeFibonacci(n));

.net相关问答推荐

如何处理以用户为中心的CSP现时值?(uc-lock.bundle.js)

ECS服务无法从Cognito获取配置

Azure SignalR 和微服务

为什么 .net 对字符串使用 UTF16 编码,但默认使用 UTF-8 来保存文件?

如何获得友好的操作系统版本名称?

如何判断 IOException 是否为 Not-Enough-Disk-Space-Exception 类型?

如何在 EF 代码优先中禁用链接表的级联删除?

如何在 C# 中打开 Excel 文件?

如何根据新的安全策略在 .Net 中发送邮箱?

找不到 Assert.Fail 和 Assert.Pass 或等效项

无法将文件 *.mdf 作为数据库附加

何时在 C#/.NET 中使用指针?

X509Certificate 构造函数异常

当我们按下 Enter 键时启动的 WPF 文本框命令

.Net 正则表达式:单词字符 \w 是什么?

从 'System.Int32' 到 'System.Nullable`1[[System.Int32, mscorlib]] 的无效转换

C# 应用程序中的全局键盘捕获

根据条件从列表中删除项目

您可以将 Microsoft Entity Framework 与 Oracle 一起使用吗?

C#/.NET 中仅命名空间的类可见性?