Kon*_*ten 1 c# multithreading delegates
我测试了以下代码行(当然不是同时代码),据我所知,它们实现了相同的结果.作为一个谨慎的人,我可以想象他们做什么/做什么之间存在差异,但由于缺乏适当的观察样本,我对此一无所知.
Thread whee = new Thread((ThreadStart)delegate { someObject.Start(); });
Thread whoo = new Thread(someObject.Start);
Thread whaa = new Thread(() => { someObject.Start(); });
Run Code Online (Sandbox Code Playgroud)
什么,如果有的话,是上述之间的区别?这些信息是否可以在几乎看不见的地方找到,而我因为混乱而错过了它?!
第一次和第三次调用完全相同.关于这两个:
//Thread whee = new Thread((ThreadStart)delegate { someObject.Start(); });
//or, using a lambda expression,
Thread whee = new Thread(() => someObject.Start());
Thread whoo = new Thread(someObject.Start);
Run Code Online (Sandbox Code Playgroud)
在第一个中,您创建一个关闭(或捕获)someObject变量的委托.当线程调用您的委托时,它将评估变量指向的对象,并调用Start它.
在第二个,someObject热切评估.
Thread whee = new Thread(() => someObject.Start());
Thread whoo = new Thread(someObject.Start);
someObject = someOtherObject;
whee.Start();
whoo.Start();
Run Code Online (Sandbox Code Playgroud)
如果someObject在启动线程之前为变量分配新对象,您会注意到:
Start上someOtherObject,因为封闭变量是懒洋洋地评估.Start的原始实例someObject,因为该变量是经过永久评估的.