C# Task.Delay()不延迟
尝试理解以下示例中的async/await:C# Task.Delay()不延迟,c#,C#,尝试理解以下示例中的async/await: public static Task <string> job() { Console.WriteLine("start delay 1"); Task.Delay(2000); Console.WriteLine("sleep done 1"); Task<string> t = new Task<string>(()=> { Console.WriteLi
public static Task <string> job()
{
Console.WriteLine("start delay 1");
Task.Delay(2000);
Console.WriteLine("sleep done 1");
Task<string> t = new Task<string>(()=> {
Console.WriteLine("start delay 2");
Task.Delay(3000);
Console.WriteLine("sleep done 2");
return "aaaa"; }) ;
t.Start();
return t;
}
public async static void caller()
{
string s = await job();
Console.WriteLine("result is {0}", s);
}
public static void Main()
{
caller();
Console.WriteLine("done with caller");
Console.ReadLine();
}
为了获得更清晰的图片,我想让任务运行更长一点,并添加了task.Delay。两次延误都没有花时间,而且都会立即结束。为什么?如何使我的任务在简单作业上花费一些时间以使其持续更长时间?task.Delay创建一个任务,该任务将延迟指定的时间。您确实会生成一个延迟2秒的任务,但您从不等待它
将wait添加到调用中可以解决此问题。您必须将该方法标记为异步
您可以阅读有关异步编程任务的更多信息。延迟将返回一个任务,该任务将在您提供的给定毫秒内完成。要在此时保持代码的执行,这是对其功能的极大简化,您必须在c中对async/await进行更多的学习,您需要像这样等待对Task.Delay2000的调用
await Task.Delay(2000);
public static async Task<string> job()
要使用wait关键字,您需要像下面这样将方法签名标记为异步
await Task.Delay(2000);
public static async Task<string> job()
但我强烈建议您阅读async and await您必须等待任务。Delayms注意,您必须使作业异步,正如@stuartd所说的那样,对于此任务,to workjob也应标记为async。请查看其中的代码和示例