How to cancel await Task.Delay()?

后端 未结 4 769
生来不讨喜
生来不讨喜 2020-12-09 08:02

As you can see in this code:

public async void TaskDelayTest()
{
     while (LoopCheck)
     {
          for (int i = 0; i < 100; i++)
          {
                


        
4条回答
  •  再見小時候
    2020-12-09 09:01

    using System;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static DateTime start;
            static CancellationTokenSource tokenSource;
            static void Main(string[] args)
            {
                start = DateTime.Now;
                Console.WriteLine(start);
    
    
                TaskDelayTest();
    
                TaskCancel();
    
                Console.ReadKey();
            }
    
            public static async void TaskCancel()
            {
                await Task.Delay(3000);
    
                tokenSource?.Cancel();
    
                DateTime end = DateTime.Now;
                Console.WriteLine(end);
                Console.WriteLine((end - start).TotalMilliseconds);
            }
    
            public static async void TaskDelayTest()
            {
                tokenSource = new CancellationTokenSource();
    
                try
                {
                    await Task.Delay(2000, tokenSource.Token);
                    DateTime end = DateTime.Now;
                    Console.WriteLine(end);
                    Console.WriteLine((end - start).TotalMilliseconds);
                }
                catch (TaskCanceledException ex)
                {
                    Console.WriteLine(ex.Message);
                }
                finally
                {
                    tokenSource.Dispose();
                    tokenSource = null;
                }
            }
        }
    }
    

提交回复
热议问题