在 MSDN 文档中,我看到了 A 和 B。两者都以某种方式都使用了 WaitCallback 吗?为什么语法不同?
A.
static void Main()
{
ThreadPool.QueueUserWorkItem(Foo);
}
static void Foo(Bar bar)
{
//do Stuff
}
B.
static void Main()
{
Bar bar = new Bar();
ThreadPool.QueueUserWorkItem(new WaitCallBak(Foo), bar);
}
static void Foo(Bar bar)
{
//do Stuff
}
最佳答案
您当前的代码将无法编译。 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 表达式和方法组来代替委托(delegate)。
所以如下:
ThreadPool.QueueUserWorkItem(new WaitCallback(Foo), bar);
ThreadPool.QueueUserWorkItem(Foo, bar);
是等价的。
关于c# - 我需要等待回调吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37648698/