根据以下代码,我的期望是控制台会发出
但是任务没有运行。只有第一行在控制台中发出。请说明原因?
static void Main(string[] args)
{
var task2 = SayHelloTask();
var result = task2.Result;
Console.WriteLine(result);
}
public static Task<string> SayHelloTask()
{
Thread.Sleep(2000);
Console.WriteLine("SayHelloTaskCalled");
return new Task<string>(() => {
Console.WriteLine("Task Executing");
return "SayHelloAfterSleepTask";
});
答案 0 :(得分:6)
使用其中一个构造函数创建一个新的Task
,可以支持&#34; Cold Task&#34;。意味着任务尚未开始。由于您从未启动任务,因此您无法看到预期的输出。
您需要致电Task.Start
启动它。要返回&#34; Hot Task&#34;(已启动任务),您需要使用Task.Factory.StartNew
或Task.Run
。
以下应该工作:
public static Task<string> SayHelloTask()
{
Thread.Sleep(2000);
Console.WriteLine("SayHelloTaskCalled");
return Task.Run(() => {
Console.WriteLine("Task Executing");
return "SayHelloAfterSleepTask";
});
}
如果你更喜欢你的任务是&#34;冷任务&#34;本身,然后修改你的调用代码如下。
static void Main(string[] args)
{
var task2 = SayHelloTask();
task2.Start();//<--Start a "Cold task"
var result = task2.Result;
Console.WriteLine(result);
}