参数化线程,理解lambda表达式

时间:2017-05-03 09:36:57

标签: c# multithreading lambda

我阅读了以下代码,并希望了解更多lambda表达式。

ThreadStart starter = () => Threads.QueryThread(tmpweb, LastExecutedate);
var thread = new Thread(starter);
thread.Start();

在阅读documentation之后,没有给出参数(() =>),表达式是使用静态方法Threads.QueryThread的匿名委托初始化ThreadStart实例?是吗?

1 个答案:

答案 0 :(得分:0)

  

使用静态方法Threads.QueryThread的匿名委托?是吗?

不完全;它是一个委托实例,是指一个实现匿名方法的方法目标 反过来调用 Threads.QueryThread方法,大概是使用捕获上下文来提供对tmpwebLastExecutedate的访问(可能是通过this?)< / p>

class SomeClass {
    public SomeType tmpweb;
    public SomeOtherType @this;
    public void TheMethod() {
        Threads.QueryThread(tmpweb, @this.LastExecutedate);
    }
}

SomeClass ctx = new SomeClass { @this = this };
...
ctx.tmpweb = ... 
...
ThreadStart starter = new ThreadStart(ctx.TheMethod);
var thread = new Thread(starter);
thread.Start();

请注意 这里的某些范围是差异,具体取决于完全 tmpwebLastExecutedate是什么 - 如果他们 don& #39; t 实际上涉及任何捕获的上下文(所有静态,或者所有内容都在this上),然后编译器可以做一些稍微不同的事情作为优化。