使用Threadpool时如何传递多个参数?我想做类似于PerformTest的事情(true,3,2,_cancellationTokenSourceObj.Token)
我正在使用它只传递令牌以取消:
_cancellationTokenSourceObj = new CancellationTokenSource();
ThreadPool.QueueUserWorkItem(new WaitCallback(PerformTest), _cancellationTokenSourceObj.Token);
PerformTest方法:
public void PerformTest(object obj)
{
CancellationToken token = (CancellationToken)obj;
..
}
答案 0 :(得分:0)
如果使用匿名函数,它将作为闭包使用,并且可以访问本地范围内的变量。
bool arg0 = true;
int arg1 = 3;
int arg2 = 2;
CancellationTokenSource cancelTokenSource = new CancellationTokenSource();
ThreadPool.QueueUserWorkItem(obj =>
{
CancellationToken token = (CancellationToken)obj;
// PerformTest body here
// This anonymous delegate is a closure and has access to arg0, arg1, and arg2.
}, cancelTokenSource.Token);
如果要继续使用命名函数,则需要为参数创建数据结构,并使用取消令牌,并从命名函数中的object参数转换它。
答案 1 :(得分:0)
如果您坚持使用这个过时的API:
_cancellationTokenSourceObj = new CancellationTokenSource();
ThreadPool.QueueUserWorkItem(() => PerformTest(_cancellationTokenSourceObj.Token));
更好地使用Task.Run
。