4

我对 Lambda 表达式有一个大致的了解,但不确定() =>语法的含义。此代码似乎返回任务项列表,但我不确定它如何执行或如何解释它的含义。

有人可以告诉我:

  1. 是什么() =>意思?
  2. 似乎每个new Task块都是按顺序执行的?
 private DateTime? _myTime = null;
 private DateTime? _theirTime = null;
 private bool _okToProcess = true;

 List<Task> myTasks = new List<Task>
            {
                   new Task( () => 
                    {
                        _myTime = GetMyTime();
                    }),

                     new Task( () => 
                    {
                        _theirTime = GetTheirTime(); 
                        _okToProcess = _myTime > _theirTime;                                         
                    }),

                new Task(() => 
                    {
                        if (_okToProcess)
                        {
                           WriteToMyLogStep("We are processing");
                        }
                        else
                        {
                           WriteToMyLogStep("We are NOT processing");
                        }
                     });
            };
4

7 回答 7

4

()- 表示匿名方法所取的参数,

=>- 通常读取指向使用这些参数的匿名方法主体(如果提供的话)。

在您的情况下, lamda 表达式与以下内容相同:

 delegate() {  _myTime = GetMyTime(); }

至于任务,它们只是添加到列表中,没有执行。它们将如何执行取决于您将来要如何执行它们。(可能在同一个线程的循环中,也可能在不同的线程中)。

于 2013-02-22T16:36:36.440 回答
4

() =>语法只是意味着 lambda 没有命名输入。这就像调用一个不带参数的方法。

至于代码,任务刚刚创建但从未真正启动,因此它们不会在显示的代码中运行。我假设列表是枚举的,并且任务从其他地方开始。

于 2013-02-22T16:37:38.457 回答
2

您可能习惯于看到 lambda 函数,例如x => DoSomething(x). 这实际上是简写(x) => DoSomething(x)- 初始(x)代表函数的参数,与(x)in相同DoSomething(x)。做。

在这种情况下,没有参数,因此它使用(),与常规函数相同DoSomething()

至于Tasks,一旦启动,它们就会并行运行,除非您明确等到每个都完成后再开始下一个。

于 2013-02-22T16:38:58.333 回答
0

() 将类似于函数所采用的参数,并且我相信任务是异步执行的 => 指向函数的主体

于 2013-02-22T16:38:04.867 回答
0
  1. 要执行的匿名 Action;
  2. 任务只是定义,而不是执行。
于 2013-02-22T16:38:51.363 回答
0

()=>Action- 一个没有参数的表达式。

这些任务尚未开始,因此(目前)永远不会完成......

于 2013-02-22T16:39:02.713 回答
0
  1. ()是您的参数列表,在您的情况下为空或无,它被传递到=>运算符之后的匿名函数中。它的=>名字来自 Lambda 演算。

  2. 这取决于您如何调用列表中的任务。这只是其中的一个List<Task>任务。为了执行您的任务,您需要执行以下操作:

    foreach (Task t in myTasks) {
        t.RunSynchronously();  // in this case the tasks would run synchronously
    }
    
于 2013-02-22T16:39:19.660 回答