我需要WaitCallback吗?

时间:2016-06-06 02:13:24

标签: c# concurrency delegates

在MSDN文档中,我已经看过A和B.两者都以某种方式使用WaitCallback?为什么语法不同?

一个。

static void Main()
{

   ThreadPool.QueueUserWorkItem(Foo);
}

static void Foo(Bar bar) 
{
     //do Stuff
}

static void Main()
{
   Bar bar = new Bar();
   ThreadPool.QueueUserWorkItem(new WaitCallBak(Foo), bar);
}

static void Foo(Bar bar) 
{
     //do Stuff
}

1 个答案:

答案 0 :(得分:2)

您当前的代码无法编译。 WaitCallback is a delegate,定义为void Foo(object bar)。因此你不能写:

ThreadPool.QueueUserWorkItem(new WaitCallback(Foo), bar);

因为Foo定义为void Foo(Bar bar),而不是void Foo(object bar)。现在,假设我们修复了Foo的签名,那么它们是等价的。

C#提供语法糖,允许您编写lambda表达式和方法组来代替委托。

以下内容:

ThreadPool.QueueUserWorkItem(new WaitCallback(Foo), bar);
ThreadPool.QueueUserWorkItem(Foo, bar);

是等效的。