这里有一个问题,这篇文章完全是新的:带有lambda表达式和匿名方法的ThreadPool.QueueUserWorkItem
具体如下:
ThreadPool.QueueUserWorkItem(
o => test.DoWork(s1, s2)
);
Run Code Online (Sandbox Code Playgroud)
有人可以解释'o'是什么?我可以看到(在VS2008中)它是一个对象参数,但我基本上不明白为什么以及如何.
eld*_*rge 10
ThreadPool.QueueUserWorkItem需要WaitCallback委托作为参数.
此委托类型对应于void一个类型参数的函数Object.
所以,完整版的通话可能是
ThreadPool.QueueUserWorkItem(
new WaitCallback(delegate(object state) { test.DoWork(s1,s2); });
);
Run Code Online (Sandbox Code Playgroud)
会更简洁
ThreadPool.QueueUserWorkItem(
delegate(object state) { test.DoWork(s1,s2); };
);
Run Code Online (Sandbox Code Playgroud)
使用C#3.0语法,我们可以用更简短的形式编写它:
ThreadPool.QueueUserWorkItem(
(object state) => { test.DoWork(s1,s2); };
);
Run Code Online (Sandbox Code Playgroud)
C#3.0 lambda语法允许省略state类型.由于这个参数不是真的需要,它也缩写为它的类型的第一个字母.