was*_*tik 6 c# parameters multithreading threadpool
我们有以下代码(在本网站上找到此代码的想法),它将为方法"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();
Run Code Online (Sandbox Code Playgroud)
但是我们想要使用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();
Run Code Online (Sandbox Code Playgroud)