C# Task.Delay 简单测试
class TaskDelayTest
{
    Stopwatch sw = new Stopwatch();
    public void DoRun()
    {
        Console.WriteLine($"Caller:Before call.");
        ShowDelayAsync();
        //ShowDelay();
        Console.WriteLine($"Caller:After call.");
    }
    private async void ShowDelayAsync()
    {
        sw.Start();
        Console.WriteLine($"    延时前:{sw.ElapsedMilliseconds}");
        await Task.Delay(1000); // 不会阻塞当前线程
        Console.WriteLine($"    延时后:{sw.ElapsedMilliseconds}");
    }
    private async void ShowDelay()
    {
        sw.Start();
        Console.WriteLine($"    延时前:{sw.ElapsedMilliseconds}");
        await Task.Run(()=> Thread.Sleep(1000)); 
        Console.WriteLine($"    延时后:{sw.ElapsedMilliseconds}");
    }
}
class Program
{
    static void Main()
    {
        TaskDelayTest test = new TaskDelayTest();
        test.DoRun();
        Console.ReadKey();
    }
}
输出:
ShowDelayAsync();    ShowDelay(); 这两个函数的输出顺序效果是一样的。 可以理解为  Task.Delay(1000) 等于 Task.Run(()=> Thread.Sleep(1000))?
Caller:Before call.
    延时前:0
Caller:After call.
    延时后:1027
如果阻塞线程,输出顺序应该是(函数调用完返回后,顺序输出):
Caller:Before call.
    延时前:0
    延时后:1001
Caller:After call.
参考:
《图解教程》
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号