c# - 我需要等待回调吗?

标签 c# concurrency delegates

在 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/

相关文章:

java - 内存屏障和 java.util.concurrent.locks.Condition 示例

Java volatile 和副作用

swift - 使用 Swift 委托(delegate)

C# 匿名委托(delegate)效率/安全

android - kotlin 委托(delegate)属性,在 get() 方法中我如何访问该值?

c# - 如何使用 Binding 在 TextBlock 中实现 NullText?

c# - 背景颜色未在 Pechkin 生成的 PDF 中呈现

concurrency - 使用代理同步作业

c# - 使用 Moq 通过任意键和值设置任意

c# - ASPxPivotGrid 排序