gpt4 book ai didi

使用 ThreadPool 的 C# Execute 方法(带参数)

转载 作者:太空狗 更新时间:2023-10-29 21:25:28 24 4
gpt4 key购买 nike

我们有以下一段代码(这段代码的想法是在这个网站上找到的),它将为方法“Do_SomeWork()”生成新的线程。这使我们能够多次异步运行该方法。

代码是:

    var numThreads = 20;
var toProcess = numThreads;

var resetEvent = new ManualResetEvent(false);

for (var i = 0; i < numThreads; i++)
{
new Thread(delegate()
{
Do_SomeWork(Parameter1, Parameter2, Parameter3);
if (Interlocked.Decrement(ref toProcess) == 0) resetEvent.Set();
}).Start();
}

resetEvent.WaitOne();

但是我们更愿意使用 ThreadPool 而不是创建我们自己的新线程,这可能会损害性能。问题是我们如何修改上面的代码以使用 ThreadPool,记住方法“Do_SomeWork”有多个参数并且还有一个返回类型(即方法不是 void)。

此外,这是 C# 2.0。

最佳答案

几乎相同的方式,但使用传递给 ThreadPool.QueueUserWorkItem 的 WaitCallback:

var numThreads = 20;
var toProcess = numThreads;

var resetEvent = new ManualResetEvent(false);

for (var i = 0; i < numThreads; i++)
{
ThreadPool.QueueUserWorkItem (
new WaitCallback(delegate(object state) {
Do_SomeWork(Parameter1, Parameter2, Parameter3);
if (Interlocked.Decrement(ref toProcess) == 0) resetEvent.Set();
}), null);
}

resetEvent.WaitOne();

关于使用 ThreadPool 的 C# Execute 方法(带参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2671634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com