hel*_*rld 2 c# task task-parallel-library
根据以下代码,我的期望是控制台会发出
但是任务没有运行.只有第一行在控制台中发出.请说明原因?
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";
});
Run Code Online (Sandbox Code Playgroud)
Task使用其中一个构造函数创建一个新程序可以为您提供"冷任务".这意味着任务尚未启动.由于您从未启动过任务,因此您看不到预期的输出.
你需要打电话Task.Start来启动它.要返回"热任务"(已启动任务),您需要使用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";
});
}
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢将Task作为"Cold Task"本身,那么请修改您的调用代码,如下所示.
static void Main(string[] args)
{
var task2 = SayHelloTask();
task2.Start();//<--Start a "Cold task"
var result = task2.Result;
Console.WriteLine(result);
}
Run Code Online (Sandbox Code Playgroud)