Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ThreadPool.QueueUserWorkItem--是否需要新的WaitCallback()?_C#_.net_Multithreading_Threadpool - Fatal编程技术网

C# ThreadPool.QueueUserWorkItem--是否需要新的WaitCallback()?

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,一旦我缩

我看到的90%的示例(包括MSDN)使用以下语法:

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;