使用Threadpool时如何传递令牌和输入参数?

时间:2015-10-27 18:29:53

标签: c# multithreading

使用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;
        ..
      }

2 个答案:

答案 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