c# - 在 C# 中将多个 Parallel.ForEach 合并为一个

标签 c# multithreading

Parallel.ForEach 阻塞直到所有线程返回。下面的每个 objectType 实际上是一个列表。在这种情况下,有什么方法可以只使用一次 Parallel.ForEach 吗?请指教。

Main(){
    List<Type1> objectType1 = ...
        List<Type2> objectType2 = ...
        List<Type3> objectType3 = ...

    Parallel.ForEach(objectType1, MyFunction)
    Parallel.ForEach(objectType2, MyFunction)
    Parallel.ForEach(objectType3, MyFunction)
}


编辑: 这是我的函数:

MyFunction (object arg) {

    //some code here

    if (arg is Type1) { ProcessType1(arg as Type1); }

    else if (arg is Type2) { ProcessType2(arg as Type2); }

    else if (arg is Type3) { ProcessType3(arg as Type3); }

    //some more code here
}

最佳答案

对于您上面编写的伪代码,Type1Type2Type3 都必须可转换为通用类型, MyFunction 方法的参数类型。如果它们都有一个共同的基本类型,并且您实际上是在为它们调用 MyFunction,那么您可以使用 LINQ 组合这些序列:

Parallel.ForEach(objectType1.Concat<BaseType>(objectType2).Concat(objectType3),
    MyFunction);

MyFunction 看起来像:

public void MyFunction(BaseType baseType)
{
    // Process base type...
}

关于c# - 在 C# 中将多个 Parallel.ForEach 合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6500466/

相关文章:

c# - SQL Server 2008 的墓碑问题

c# - 为什么我的绑定(bind)参数都相同(使用 Linq)?

c# - 适用于 Windows CE 5.0 和 .NET 2.0 的蓝牙与 C#

c# - T4 模板使用来自服务器资源管理器的连接

iOS - 从一台设备向另一台设备流式传输和接收音频以一个仅发送而另一个仅接收结束

在同一端口上支持 IPv6 和 IPv4 的 C# 服务器

java - 两把锁的守护状态

multithreading - Mahout优化: Multithreading TopItems. getTopUsers()和TopItems.getTopItems()

java - 哲学家就餐算法僵局

java - 在 Java 中模拟 Field-visibility 问题