假设我有一个多线程控制台应用程序:
class Program
{
private static void Method()
{
Console.WriteLine("Method() started");
for (var i = 0; i < 20; i++)
{
Console.WriteLine($"Counter = {i}");
Thread.Sleep(500);
}
Console.WriteLine("Method() finished");
}
static void Main(string[] args)
{
Console.WriteLine("Main Started");
var task = new Task(Method);
task.Start();
for (var i = 0; i < 60; i++)
{
Console.Write(".");
Thread.Sleep(100);
}
Console.WriteLine("Main finished");
Console.ReadLine();
}
}
我的问题是编译器如何知道在哪个委托中使用.. = new Task(..)? 我的意思是编译器如何替换此笔画
var task = new Task(Method);
用这个
var action = new Action(Method);
var task = new Task(action);
答案 0 :(得分:2)
Action的构造函数接受void方法
new Action(someVoidMethod);
编译器实际生成了这段代码:
Task task = new Task(new Action(Program.Method));
由于传递的void方法没有参数,编译器可以将其转换为Action
。