我需要使用多线程并行处理表格中的记录。我正在使用C#并针对.NET 2.0。
我知道我可以在.NET 4.0中使用Parallel.ForEach
来实现这一点,但我不确定如何在.NET 2.0中实现。
我需要使用多线程并行处理表格中的记录。我正在使用C#并针对.NET 2.0。
我知道我可以在.NET 4.0中使用Parallel.ForEach
来实现这一点,但我不确定如何在.NET 2.0中实现。
没有其他要求的情况下,可以通过定义一个函数来实现多线程。
static void Function()
{
// do some work here
}
然后被另一个线程用作入口点
Thread iThread = new Thread(Function);
并且
iThread.Start();
是一个非阻塞调用,启动另一个线程。
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();
}
}
这里是示例
WaitHandle.WaitAll
而不是WaitOne
,以避免不必要的唤醒。 - Sriram Sakthivel在 .Net 4.0 之前,实现并行的推荐方式是使用 "ThreadPool",除非你有特殊的用例。
例如,如果你需要一个“前台线程”或STA线程,则直接使用Thread类。否则,总是使用 ThreadPool。
你可以通过调用 ThreadPool.QueueUserWorkItem 方法来使用 ThreadPool。
然而 QueueUserWorkItem
不提供任何等待完成的方法。如果你想要等待完成,你可以使用 Delegate.BeginInvoke,它会返回一个IAsyncResult
(相当于在 .Net 4.0 之前的 Task),这个方法允许你等待完成和更多其他操作。
System.Threading
命名空间的信息:https://msdn.microsoft.com/zh-cn/library/system.threading(v=vs.80).aspx - Irwene