Task.Delay Task.Delay Task.Delay Task.Delay Method

Определение

Создает задачу, которая будет выполнена после некоторой временной задержки.Creates a task that will complete after a time delay.

Перегрузки

Delay(TimeSpan, CancellationToken) Delay(TimeSpan, CancellationToken) Delay(TimeSpan, CancellationToken)

Создает отменяемую задачу, которая завершается через заданное время.Creates a cancellable task that completes after a specified time interval.

Delay(Int32, CancellationToken) Delay(Int32, CancellationToken) Delay(Int32, CancellationToken)

Создает отменяемую задачу, которая завершается через заданное количество миллисекунд.Creates a cancellable task that completes after a specified number of milliseconds.

Delay(Int32) Delay(Int32) Delay(Int32) Delay(Int32)

Создает задачу, которая завершается через заданное количество миллисекунд.Creates a task that completes after a specified number of milliseconds.

Delay(TimeSpan) Delay(TimeSpan) Delay(TimeSpan) Delay(TimeSpan)

Создает задачу, которая завершается через заданное время.Creates a task that completes after a specified time interval.

Delay(TimeSpan, CancellationToken) Delay(TimeSpan, CancellationToken) Delay(TimeSpan, CancellationToken)

Создает отменяемую задачу, которая завершается через заданное время.Creates a cancellable task that completes after a specified time interval.

public:
 static System::Threading::Tasks::Task ^ Delay(TimeSpan delay, System::Threading::CancellationToken cancellationToken);
public static System.Threading.Tasks.Task Delay (TimeSpan delay, System.Threading.CancellationToken cancellationToken);
static member Delay : TimeSpan * System.Threading.CancellationToken -> System.Threading.Tasks.Task

Параметры

delay
TimeSpan TimeSpan TimeSpan TimeSpan

Время, в течение которого ожидается завершение возвращаемой задачи, или TimeSpan.FromMilliseconds(-1) для неограниченного времени ожидания.The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

cancellationToken
CancellationToken CancellationToken CancellationToken CancellationToken

Токен отмены, который нужно контролировать во время ожидания выполнения задачи.A cancellation token to observe while waiting for the task to complete.

Возвраты

Задача, представляющая временную задержку.A task that represents the time delay.

Исключения

delay представляет отрицательный интервал времени, отличный от TimeSpan.FromMilliseconds(-1).delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

- или --or- Свойство TotalMilliseconds аргумента delay больше, чем MaxValue.The delay argument's TotalMilliseconds property is greater than MaxValue.

Задача была отменена.The task has been canceled.

Предоставленный объект cancellationToken уже удален.The provided cancellationToken has already been disposed.

Примеры

В следующем примере запускается задача, которая включает вызов метода Delay(TimeSpan, CancellationToken) с задержкой 1,5 секунд.The following example launches a task that includes a call to the Delay(TimeSpan, CancellationToken) method with a 1.5 second delay. До истечения интервала задержки маркер отменяется.Before the delay interval elapses, the token is cancelled. Выходные данные в примере показывают, что в результате возникает TaskCanceledException, а свойство Tasks "Status" имеет значение Canceled.The output from the example shows that, as a result, a TaskCanceledException is thrown, and the tasks' Status property is set to Canceled.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      CancellationTokenSource source = new CancellationTokenSource();

      var t = Task.Run(async delegate
              {
                 await Task.Delay(TimeSpan.FromSeconds(1.5), source.Token);
                 return 42;
              });
      source.Cancel();
      try {
         t.Wait();
      }
      catch (AggregateException ae) {
         foreach (var e in ae.InnerExceptions)
            Console.WriteLine("{0}: {1}", e.GetType().Name, e.Message);
      }
      Console.Write("Task t Status: {0}", t.Status);
      if (t.Status == TaskStatus.RanToCompletion)
         Console.Write(", Result: {0}", t.Result);
      source.Dispose();
   }
}
// The example displays output like the following:
//       TaskCanceledException: A task was canceled.
//       Task t Status: Canceled
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim source As New CancellationTokenSource()
      
      Dim t = Task.Run(Async Function()
                                Await Task.Delay(TimeSpan.FromSeconds(1.5),
                                                 source.Token)
                                Return 42
                       End Function)
      source.Cancel()
      Try
         t.Wait()
      Catch ae As AggregateException
         For Each e In ae.InnerExceptions
            Console.WriteLine("{0}: {1}", e.GetType().Name, e.Message)
         Next
      End Try
      Console.Write("Task t Status: {0}", t.Status)
      If t.Status = TaskStatus.RanToCompletion Then
         Console.Write(", Result: {0}", t.Result)
      End If
      source.Dispose()
   End Sub
End Module
' The example displays output like the following:
'       TaskCanceledException: A task was canceled.
'       Task t Status: Canceled

Обратите внимание, что этот пример включает потенциальное условие состязания: это зависит от задачи, которая асинхронно выполняет задержку при отмене маркера.Note that this example includes a potential race condition: it depends on the task asynchronously executing the delay when the token is cancelled. Несмотря на то, что задержка 1,5 из вызова метода Delay(TimeSpan, CancellationToken) делает это допущением, тем не менее возможно, что вызов метода Delay(TimeSpan, CancellationToken) может возвращаться до отмены маркера.Although the 1.5 second delay from the call to the Delay(TimeSpan, CancellationToken) method makes that assumption likely, it is nevertheless possible that the call to the Delay(TimeSpan, CancellationToken) method could return before the token is cancelled. В этом случае в примере выводится следующий результат:In that case, the example produces the following output:

Task t Status: RanToCompletion, Result: 42  

Комментарии

Если маркер отмены сообщается до заданной задержки, возникает исключение TaskCanceledException, и задача завершается в состоянии Canceled.If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. В противном случае задача завершается в состоянии RanToCompletion по истечении заданной задержки.Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

Сценарии использования и дополнительные примеры см. в документации по перегрузке Delay(Int32).For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Этот метод зависит от системных часов.This method depends on the system clock. Это означает, что задержка времени будет приблизительно совпадать с разрешением системных часов, если аргумент delay меньше, чем разрешение системных часов, что составляет примерно 15 миллисекунд на системах Windows.This means that the time delay will approximately equal the resolution of the system clock if the delay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.

Delay(Int32, CancellationToken) Delay(Int32, CancellationToken) Delay(Int32, CancellationToken)

Создает отменяемую задачу, которая завершается через заданное количество миллисекунд.Creates a cancellable task that completes after a specified number of milliseconds.

public:
 static System::Threading::Tasks::Task ^ Delay(int millisecondsDelay, System::Threading::CancellationToken cancellationToken);
public static System.Threading.Tasks.Task Delay (int millisecondsDelay, System.Threading.CancellationToken cancellationToken);
static member Delay : int * System.Threading.CancellationToken -> System.Threading.Tasks.Task

Параметры

millisecondsDelay
Int32 Int32 Int32 Int32

Время в миллисекундах, в течение которого ожидается завершение возвращаемой задачи, или -1 для неограниченного времени ожидания.The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

cancellationToken
CancellationToken CancellationToken CancellationToken CancellationToken

Токен отмены, который нужно контролировать во время ожидания выполнения задачи.A cancellation token to observe while waiting for the task to complete.

Возвраты

Задача, представляющая временную задержку.A task that represents the time delay.

Исключения

Аргумент millisecondsDelay меньше –1.The millisecondsDelay argument is less than -1.

Задача была отменена.The task has been canceled.

Предоставленный объект cancellationToken уже удален.The provided cancellationToken has already been disposed.

Примеры

В следующем примере запускается задача, которая включает вызов метода Delay(Int32, CancellationToken) с задержкой в одну секунду.The following example launches a task that includes a call to the Delay(Int32, CancellationToken) method with a one second delay. До истечения интервала задержки маркер отменяется.Before the delay interval elapses, the token is cancelled. Выходные данные в примере показывают, что в результате возникает TaskCanceledException, а свойство Tasks "Status" имеет значение Canceled.The output from the example shows that, as a result, a TaskCanceledException is thrown, and the tasks' Status property is set to Canceled.

using System;
using System.Threading;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      CancellationTokenSource source = new CancellationTokenSource();

      var t = Task.Run(async delegate
              {
                 await Task.Delay(1000, source.Token);
                 return 42;
              });
      source.Cancel();
      try {
         t.Wait();
      }
      catch (AggregateException ae) {
         foreach (var e in ae.InnerExceptions)
            Console.WriteLine("{0}: {1}", e.GetType().Name, e.Message);
      }
      Console.Write("Task t Status: {0}", t.Status);
      if (t.Status == TaskStatus.RanToCompletion)
         Console.Write(", Result: {0}", t.Result);
      source.Dispose();
   }
}
// The example displays the following output:
//       TaskCanceledException: A task was canceled.
//       Task t Status: Canceled
Imports System.Threading
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim source As New CancellationTokenSource()
      
      Dim t = Task.Run(Async Function()
                                Await Task.Delay(1000, source.Token)
                                Return 42
                       End Function)
      source.Cancel()
      Try
         t.Wait()
      Catch ae As AggregateException
         For Each e In ae.InnerExceptions
            Console.WriteLine("{0}: {1}", e.GetType().Name, e.Message)
         Next
      End Try
      Console.Write("Task t Status: {0}", t.Status)
      If t.Status = TaskStatus.RanToCompletion Then
         Console.Write(", Result: {0}", t.Result)
      End If
      source.Dispose()
   End Sub
End Module
' The example displays the following output:
'       TaskCanceledException: A task was canceled.
'       Task t Status: Canceled

Комментарии

Если маркер отмены сообщается до заданной задержки, возникает исключение TaskCanceledException, и задача завершается в состоянии Canceled.If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. В противном случае задача завершается в состоянии RanToCompletion по истечении заданной задержки.Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

Сценарии использования и дополнительные примеры см. в документации по перегрузке Delay(Int32).For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Этот метод зависит от системных часов.This method depends on the system clock. Это означает, что задержка времени будет приблизительно совпадать с разрешением системных часов, если аргумент millisecondsDelay меньше, чем разрешение системных часов, что составляет примерно 15 миллисекунд на системах Windows.This means that the time delay will approximately equal the resolution of the system clock if the millisecondsDelay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.

Delay(Int32) Delay(Int32) Delay(Int32) Delay(Int32)

Создает задачу, которая завершается через заданное количество миллисекунд.Creates a task that completes after a specified number of milliseconds.

public:
 static System::Threading::Tasks::Task ^ Delay(int millisecondsDelay);
public static System.Threading.Tasks.Task Delay (int millisecondsDelay);
static member Delay : int -> System.Threading.Tasks.Task
Public Shared Function Delay (millisecondsDelay As Integer) As Task

Параметры

millisecondsDelay
Int32 Int32 Int32 Int32

Время в миллисекундах, в течение которого ожидается завершение возвращаемой задачи, или -1 для неограниченного времени ожидания.The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

Возвраты

Задача, представляющая временную задержку.A task that represents the time delay.

Исключения

Аргумент millisecondsDelay меньше –1.The millisecondsDelay argument is less than -1.

Примеры

В следующем примере показано простое использование метода Delay.The following example shows a simple use of the Delay method.

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task.Run(async delegate
              {
                 await Task.Delay(1000);
                 return 42;
              });
      t.Wait();
      Console.WriteLine("Task t Status: {0}, Result: {1}",
                        t.Status, t.Result);
   }
}
// The example displays the following output:
//        Task t Status: RanToCompletion, Result: 42
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t = Task.Run(Async Function()
                                Await Task.Delay(1000)
                                Return 42
                       End Function)
      t.Wait()
      Console.WriteLine("Task t Status: {0}, Result: {1}",
                        t.Status, t.Result)
   End Sub
End Module
' The example displays the following output:
'       Task t Status: RanToCompletion, Result: 42

Комментарии

Метод Delay обычно используется для задержки выполнения всей задачи или ее части в течение заданного интервала времени.The Delay method is typically used to delay the operation of all or part of a task for a specified time interval. Чаще всего используется задержка времени:Most commonly, the time delay is introduced:

  • В начале задачи, как показано в следующем примере.At the beginning of the task, as the following example shows.

    Stopwatch sw = Stopwatch.StartNew();
    var delay = Task.Delay(1000).ContinueWith(_ =>
                               { sw.Stop();
                                 return sw.ElapsedMilliseconds; } );
    
    Console.WriteLine("Elapsed milliseconds: {0}", delay.Result);
    // The example displays output like the following:
    //        Elapsed milliseconds: 1013
    
    Dim sw As Stopwatch = Stopwatch.StartNew()
    Dim delay1 = Task.Delay(1000)
    Dim delay2 = delay1.ContinueWith( Function(antecedent)
                            sw.Stop()
                            Return sw.ElapsedMilliseconds
                          End Function)
    
    Console.WriteLine("Elapsed milliseconds: {0}", delay2.Result)
    ' The example displays output like the following:
    '        Elapsed milliseconds: 1013
    
  • Время выполнения задачи.Sometime while the task is executing. В этом случае вызов метода Delay выполняется как дочерняя задача в рамках задачи, как показано в следующем примере.In this case, the call to the Delay method executes as a child task within a task, as the following example shows. Обратите внимание, что поскольку задача, вызывающая метод Delay, выполняется асинхронно, родительская задача должна дождаться ее завершения с помощью ключевого слова await.Note that since the task that calls the Delay method executes asynchronously, the parent task must wait for it to complete by using the await keyword.

    var delay = Task.Run( async () => { Stopwatch sw = Stopwatch.StartNew();
                                        await Task.Delay(2500);
                                        sw.Stop();
                                        return sw.ElapsedMilliseconds; });
    
    Console.WriteLine("Elapsed milliseconds: {0}", delay.Result);
    // The example displays output like the following:
    //        Elapsed milliseconds: 2501
    
    Dim delay = Task.Run( Async Function()
                             Dim sw As Stopwatch = Stopwatch.StartNew()
                             Await Task.Delay(2500)
                             sw.Stop()
                             Return sw.ElapsedMilliseconds
                          End Function )
    
    Console.WriteLine("Elapsed milliseconds: {0}", delay.Result)
    ' The example displays output like the following:
    '        Elapsed milliseconds: 2501
    

По истечении заданной задержки задача завершается в состоянии RanToCompletion.After the specified time delay, the task is completed in the RanToCompletion state.

Этот метод зависит от системных часов.This method depends on the system clock. Это означает, что задержка времени будет приблизительно совпадать с разрешением системных часов, если аргумент millisecondsDelay меньше, чем разрешение системных часов, что составляет примерно 15 миллисекунд на системах Windows.This means that the time delay will approximately equal the resolution of the system clock if the millisecondsDelay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.

Delay(TimeSpan) Delay(TimeSpan) Delay(TimeSpan) Delay(TimeSpan)

Создает задачу, которая завершается через заданное время.Creates a task that completes after a specified time interval.

public:
 static System::Threading::Tasks::Task ^ Delay(TimeSpan delay);
public static System.Threading.Tasks.Task Delay (TimeSpan delay);
static member Delay : TimeSpan -> System.Threading.Tasks.Task
Public Shared Function Delay (delay As TimeSpan) As Task

Параметры

delay
TimeSpan TimeSpan TimeSpan TimeSpan

Время, в течение которого ожидается завершение возвращаемой задачи, или TimeSpan.FromMilliseconds(-1) для неограниченного времени ожидания.The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

Возвраты

Задача, представляющая временную задержку.A task that represents the time delay.

Исключения

delay представляет отрицательный интервал времени, отличный от TimeSpan.FromMilliseconds(-1).delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

-или--or- Свойство TotalMilliseconds аргумента delay больше, чем MaxValue.The delay argument's TotalMilliseconds property is greater than MaxValue.

Примеры

В следующем примере показано простое использование метода Delay.The following example shows a simple use of the Delay method.

using System;
using System.Threading.Tasks;

public class Example
{
   public static void Main()
   {
      var t = Task.Run(async delegate
              {
                 await Task.Delay(TimeSpan.FromSeconds(1.5));
                 return 42;
              });
      t.Wait();
      Console.WriteLine("Task t Status: {0}, Result: {1}",
                        t.Status, t.Result);
   }
}
// The example displays the following output:
//        Task t Status: RanToCompletion, Result: 42
Imports System.Threading.Tasks

Module Example
   Public Sub Main()
      Dim t = Task.Run(Async Function()
                                Await Task.Delay(TimeSpan.FromSeconds(1.5))
                                Return 42
                       End Function)
      t.Wait()
      Console.WriteLine("Task t Status: {0}, Result: {1}",
                        t.Status, t.Result)
   End Sub
End Module
' The example displays the following output:
'       Task t Status: RanToCompletion, Result: 42

Комментарии

По истечении заданной задержки задача завершается в состоянии RanToCompletion.After the specified time delay, the task is completed in RanToCompletion state.

Сценарии использования и дополнительные примеры см. в документации по перегрузке Delay(Int32).For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Этот метод зависит от системных часов.This method depends on the system clock. Это означает, что задержка времени будет приблизительно совпадать с разрешением системных часов, если аргумент delay меньше, чем разрешение системных часов, что составляет примерно 15 миллисекунд на системах Windows.This means that the time delay will approximately equal the resolution of the system clock if the delay argument is less than the resolution of the system clock, which is approximately 15 milliseconds on Windows systems.

Применяется к