ese*_*elk 4 .net c# multithreading threadpool
我看到90%的例子,包括MSDN使用这种语法:
ThreadPool.QueueUserWorkItem(new WaitCallback(MyCallback));
Run Code Online (Sandbox Code Playgroud)
其他10%使用:
ThreadPool.QueueUserWorkItem(MyCallback);
Run Code Online (Sandbox Code Playgroud)
在两种情况下,MyCallback都是静态函数.
编译器没有给出错误,代码似乎以任何方式工作.没有创建新的WaitCallback对象并直接传递函数会有一些危险吗?
我问,因为我试图在我的代码中找到一些错误,一旦我将其缩小,我将用更具体的问题解决,但这也是一般性问题,因为我一直很好奇并且找不到任何答案.我发现的最接近的是:
http://msdn.microsoft.com/en-us/library/4yd16hza%28v=vs.90%29.aspx
哪个州:
"Visual Basic用户可以省略WaitCallback构造函数,只需在将回调方法传递给QueueUserWorkItem时使用AddressOf运算符.Visual Basic会自动调用正确的委托构造函数."
...但实际上并没有说"C#用户必须使用构造函数",我也想知道原因 /细节.我正在使用.NET 3.5.
ThreadPool.QueueUserWorkItem(new WaitCallback(MyCallback));
Run Code Online (Sandbox Code Playgroud)
和
ThreadPool.QueueUserWorkItem(MyCallback);
Run Code Online (Sandbox Code Playgroud)
是等效的,并编译为相同的字节代码.编译器new WaitCallback为您插入调用.
来自MSDN:
Run Code Online (Sandbox Code Playgroud)Del<int> m1 = new Del<int>(Notify);C#2.0版有一个称为方法组转换的新功能,它适用于具体和通用委托类型,并使您能够使用以下简化语法编写上一行:
Run Code Online (Sandbox Code Playgroud)Del<int> m2 = Notify;