ThreadPool.QueueUserWorkItem添加委托?

时间:2013-09-06 15:14:41

标签: c# multithreading

阅读我发现的一些代码:

ThreadPool.QueueUserWorkItem(delegate { this.SaveInternal(); });

为什么有人会将delegate放在这里?

2 个答案:

答案 0 :(得分:2)

像这样的Usinng委托只是传递任何有效委托的快捷方式,你不关心参数,同时保持编译器满意。否则,您必须传递一个与委托签名匹配的方法。

答案 1 :(得分:2)

最明显的答案是因为没有它,代码将无法编译。例如:

ThreadPool.QueueUserWorkItem( { this.SaveInternal(); });

提供Invalid expression term '{'

QueueUserWorkItem需要WaitCallback参数,这是一个采用Object参数的方法。你所拥有的长期形式是:

ThreadPool.QueueUserWorkItem((state) => { this.SaveInternal(); });

与以下内容相同:

void Temp(Object state)
{
    this.SaveInternal();
}

ThreadPool.QueueUserWorkItem(Temp);

添加delegate { this.SaveInternal(); }允许编译器使用类型推断来解决明显的歧义。