在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
}
答案 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);
是等效的。