在 .NET 2.0 中使用多个线程并行处理记录

本文关键字:线程 并行处理 记录 NET | 更新日期: 2023-09-27 18:36:44

我需要使用多线程并行处理表中可用的记录。我正在使用 C# 并以 .NET 2.0 为目标。

我知道我可以在 .NET 4.0 中使用Parallel.ForEach来执行此操作,但我不确定如何使用 .NET 2.0 来实现它。

在 .NET 2.0 中使用多个线程并行处理记录

无需任何其他要求,可以通过定义函数来实现多线程

static void Function()
{
    // do some work here
}

然后

Thread iThread = new Thread(Function);

iThread.Start();

是启动另一个线程的非阻塞调用。

您需要

使用 ThreadPool 和 ManualResetEvent Parallel.Foreach创建自己的实现。

public class Parallel
{
    public static void ForEach<T>(IEnumerable<T> items, Action<T> action)
    {
        var resetEvents = new List<ManualResetEvent>();
        foreach (var item in items)
        {
            var evt = new ManualResetEvent(false);
            ThreadPool.QueueUserWorkItem((i) =>
            {
                action((T)i);
                evt.Set();
            }, item);
            resetEvents.Add(evt);
        }
        foreach (var re in resetEvents)
            re.WaitOne();
    }
}

这是示例

在 .Net 4.0 之前,建议实现并行的方法是"ThreadPool",除非您有特殊用例。

例如,如果需要"前台线程"或 STA 线程,则可以直接使用 Thread 类。否则,答案总是ThreadPool。

您可以通过调用 ThreadPool.QueueUserWorkItem 方法使用 ThreadPool。

但是QueueUserWorkItem不提供任何等待完成的方法。如果要等待完成,可以使用Delegate.BeginInvoke,它返回一个IAsyncResult(大致相当于.Net 4.0之前的任务),该允许您等待完成等等。

这是我对前面问题的回答中的一个示例,该示例显示了如何启动线程并管理一次运行的线程数。这应该给你一个框架开始。