Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Task.Delay()不延迟_C# - Fatal编程技术网

C# Task.Delay()不延迟

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

尝试理解以下示例中的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.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。请查看其中的代码和示例