Task委托的方法是在什么时候执行呢?是在Run的时候还是在Start的时候呢?直接上代码
public static void Main()
{
FuncOne();
}
private static void FuncOne()
{
Console.WriteLine("当前线程:" + Thread.CurrentThread.GetHashCode());
Action action = new Action(Run);
Task task = new Task(action);
Console.WriteLine("当前状态:" + task.Status);
task.Start();
Console.WriteLine("当前状态:" + task.Status);
}
private static void Run()
{
Console.WriteLine("当前线程:" + Thread.CurrentThread.GetHashCode());
}
然后输出结果:
发现Run方法居然没有被执行,start方法后面这个的task的状态是WaitingToRun等待被执行,还没有执行呢主程序就结束了,所以需要主程序等待run方法执行完,这样才是我们需要个结果,在task之后加上wait方法如下:
public static void Main()
{
FuncOne();
}
private static void FuncOne()
{
Console.WriteLine("当前线程:" + Thread.CurrentThread.GetHashCode());
Action action = new Action(Run);
Task task = new Task(action);
Console.WriteLine("当前状态:" + task.Status);
task.Start();
task.Wait();
Console.WriteLine("当前状态:" + task.Status);
}
private static void Run()
{
Console.WriteLine("当前线程:" + Thread.CurrentThread.GetHashCode());
}
结果如下:
加上wait后发现start方法是可以执行被委托的方法的,那么run方法呢?还是直接上代码
public static void Main()
{
FuncTwo();
}
private static void Run()
{
Console.WriteLine("当前线程:" + Thread.CurrentThread.GetHashCode());
}
private static void FuncTwo()
{
Console.WriteLine("当前线程:" + Thread.CurrentThread.GetHashCode());
Task task = Task.Run(Run);
Console.WriteLine("当前状态:" + task.Status);
task.Wait();
Console.WriteLine("当前状态:" + task.Status);
}
看结果:
发现使用Task.Run(Action) 方法同样可以触发委托任务,不过调用Run方法后的状态是WaitingToRun,start开始之前的task状态是Created