C# ThreadPool.QueueUserWorkItem--是否需要新的WaitCallback()?
我看到的90%的示例(包括MSDN)使用以下语法:C# ThreadPool.QueueUserWorkItem--是否需要新的WaitCallback()?,c#,.net,multithreading,threadpool,C#,.net,Multithreading,Threadpool,我看到的90%的示例(包括MSDN)使用以下语法: ThreadPool.QueueUserWorkItem(new WaitCallback(MyCallback)); 其他10%使用: ThreadPool.QueueUserWorkItem(MyCallback); 在这两种情况下,MyCallback都是一个静态函数 编译器没有给出错误,代码似乎以任何方式工作。不创建新的WaitCallback对象而直接传递函数是否有危险 我问这个问题是因为我试图在我的代码中找到一些bug,一旦我缩
ThreadPool.QueueUserWorkItem(new WaitCallback(MyCallback));
其他10%使用:
ThreadPool.QueueUserWorkItem(MyCallback);
在这两种情况下,MyCallback都是一个静态函数
编译器没有给出错误,代码似乎以任何方式工作。不创建新的WaitCallback对象而直接传递函数是否有危险
我问这个问题是因为我试图在我的代码中找到一些bug,一旦我缩小范围,我会用更具体的问题来解决这些bug,但这也是一个一般性的问题,因为我一直很好奇,找不到任何答案。我发现最接近的是:
其中指出:
Visual Basic用户可以省略WaitCallback构造函数,只需
将回调方法传递给时使用AddressOf运算符
Visual Basic会自动调用正确的
委托构造函数。”
…但实际上并没有说“C#用户必须使用构造函数”,我还想知道为什么/详细信息。我正在使用.NET3.5
ThreadPool.QueueUserWorkItem(new WaitCallback(MyCallback));
及
是等效的,并编译为相同的字节码。编译器为您插入新WaitCallback
调用
发件人:
Del m1=新Del(通知);
C#2.0版有一个新功能,称为方法组转换,它适用于具体的和泛型委托类型,并允许您使用以下简化语法编写前一行:
Del<int> m2 = Notify;
delm2=通知;
Del<int> m1 = new Del<int>(Notify);
Del<int> m2 = Notify;