我对Lambda表达式有一般的了解,但不确定() =>
语法的含义。此代码似乎返回任务项列表,但我不确定它是如何执行的或如何解释它的含义。
有人可以告诉我:
() =>
是什么意思?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");
}
});
};
答案 0 :(得分:4)
()
- 表示匿名方法所采用的参数,
=>
- 通常会读到转到并指向使用这些参数的匿名方法主体(如果有的话)。
在您的情况下,lamda表达式与:
相同 delegate() { _myTime = GetMyTime(); }
对于他们刚刚添加到列表中的任务,它们不会被执行。它们的执行方式取决于您将来如何执行它们。 (可能在同一个线程或可能在不同线程上的循环中)。
答案 1 :(得分:4)
() =>
语法只意味着lambda没有命名输入。这就像调用一个不带参数的方法。
至于代码,任务刚刚创建但从未实际启动过,因此它们不会在显示的代码中运行。我假设列表已枚举,任务在其他地方启动。
答案 2 :(得分:2)
您可能习惯于看到像x => DoSomething(x)
这样的lambda函数。这实际上是(x) => DoSomething(x)
的简写 - 初始(x)
代表函数的参数,与(x)
中的DoSomething(x)
相同。确实
在这种情况下,没有参数,因此它使用()
,与常规函数相同DoSomething()
。
至于Task
,它们会在启动后并行运行,除非你明确等到每一个完成后才开始下一个。
答案 3 :(得分:0)
()类似于函数所采用的参数,我相信任务是异步执行的 =&GT;指向函数体的
答案 4 :(得分:0)
答案 5 :(得分:0)
()=>
是Action
- 没有参数的表达式。
这些任务尚未开始,因此(目前)永远不会完成...
答案 6 :(得分:0)
()
是您的参数列表,在您的情况下为空或无,将传递到=>
运算符后面的匿名函数中。 =>
的名字来源于Lambda演算。
这取决于您在列表中调用任务的方式。这只是一个List<Task>
,其中包含任务。为了执行您的任务,您需要执行以下操作:
foreach (Task t in myTasks) {
t.RunSynchronously(); // in this case the tasks would run synchronously
}