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

Definice

Vytvoří úlohu, která bude dokončena po prodlevě čas.Creates a task that will complete after a time delay.

Přetížení

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

Vytvoří zrušitelný úkol, který se dokončí po zadaný časový interval.Creates a cancellable task that completes after a specified time interval.

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

Vytvoří zrušitelný úkol, který se dokončí po zadaný počet milisekund.Creates a cancellable task that completes after a specified number of milliseconds.

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

Vytvoří úlohu, která se dokončí po zadaný počet milisekund.Creates a task that completes after a specified number of milliseconds.

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

Vytvoří úlohu, která skončí po uplynutí zadaného časového intervalu.Creates a task that completes after a specified time interval.

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

Vytvoří zrušitelný úkol, který se dokončí po zadaný časový interval.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

Parametry

delay
TimeSpan TimeSpan TimeSpan TimeSpan

Časový interval pro čekání před dokončením vrácené úlohy nebo TimeSpan.FromMilliseconds(-1) čekat po neomezenou dobu.The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

cancellationToken
CancellationToken CancellationToken CancellationToken CancellationToken

Token zrušení dodržovat při čekání na dokončení úkolu.A cancellation token to observe while waiting for the task to complete.

Návraty

Úloha reprezentující čas zpoždění.A task that represents the time delay.

Výjimky

delay představuje záporný časový interval jiné než TimeSpan.FromMilliseconds(-1).delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

-nebo--or- delay Argumentu TotalMilliseconds je větší než vlastnost MaxValue.The delay argument's TotalMilliseconds property is greater than MaxValue.

Poskytnuté cancellationToken už je vyřazený.The provided cancellationToken has already been disposed.

Příklady

Následující příklad spustí úlohu, která obsahuje volání Delay(TimeSpan, CancellationToken) metodu s 1,5 druhý zpoždění.The following example launches a task that includes a call to the Delay(TimeSpan, CancellationToken) method with a 1.5 second delay. Předtím, než uplyne interval zpoždění je zrušen token.Before the delay interval elapses, the token is cancelled. Výstup z příkladu ukazuje, že, v důsledku, TaskCanceledException je vyvolána výjimka a úkolů Status je nastavena na 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

Všimněte si, že tento příklad zahrnuje potenciální konflikt časování: závisí na úkolu, asynchronně spuštěný zpoždění, když je zrušen token.Note that this example includes a potential race condition: it depends on the task asynchronously executing the delay when the token is cancelled. I když 1,5 druhé zpoždění z volání Delay(TimeSpan, CancellationToken) metoda provádí tento předpoklad pravděpodobně, je však možné, volání Delay(TimeSpan, CancellationToken) metoda může vrátit předtím, než je zrušen token.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. V takovém případě tento příklad vytvoří následující výstup:In that case, the example produces the following output:

Task t Status: RanToCompletion, Result: 42  

Poznámky

Pokud token zrušení signalizován před zadaným časovou prodlevu, TaskCanceledException dojde k výjimce a úkol je dokončen během Canceled stavu.If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. V opačném případě je úkol dokončen v RanToCompletion stavu po uplynutí zadaného času zpoždění.Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

Scénáře použití a další příklady naleznete v dokumentaci k Delay(Int32) přetížení.For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Tato metoda závisí na systémové hodiny.This method depends on the system clock. To znamená, že časovou prodlevu bude přibližně rovnat rozlišení systémových hodin. Pokud delay argumentu je menší než rozlišení systémových hodin, což je přibližně 15 milisekund v systémech 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)

Vytvoří zrušitelný úkol, který se dokončí po zadaný počet milisekund.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

Parametry

millisecondsDelay
Int32 Int32 Int32 Int32

Počet milisekund čekání před dokončením vrácené úlohy nebo -1 pro nekonečně dlouhé čekání.The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

cancellationToken
CancellationToken CancellationToken CancellationToken CancellationToken

Token zrušení dodržovat při čekání na dokončení úkolu.A cancellation token to observe while waiting for the task to complete.

Návraty

Úloha reprezentující čas zpoždění.A task that represents the time delay.

Výjimky

millisecondsDelay Argumentu je menší než -1.The millisecondsDelay argument is less than -1.

Poskytnuté cancellationToken už je vyřazený.The provided cancellationToken has already been disposed.

Příklady

Následující příklad spustí úlohu, která obsahuje volání Delay(Int32, CancellationToken) metodu s jeden druhý zpoždění.The following example launches a task that includes a call to the Delay(Int32, CancellationToken) method with a one second delay. Předtím, než uplyne interval zpoždění je zrušen token.Before the delay interval elapses, the token is cancelled. Výstup z příkladu ukazuje, že, v důsledku, TaskCanceledException je vyvolána výjimka a úkolů Status je nastavena na 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

Poznámky

Pokud token zrušení signalizován před zadaným časovou prodlevu, TaskCanceledException dojde k výjimce a úkol je dokončen během Canceled stavu.If the cancellation token is signaled before the specified time delay, a TaskCanceledException exception results, and the task is completed in the Canceled state. V opačném případě je úkol dokončen v RanToCompletion stavu po uplynutí zadaného času zpoždění.Otherwise, the task is completed in the RanToCompletion state once the specified time delay has elapsed.

Scénáře použití a další příklady naleznete v dokumentaci k Delay(Int32) přetížení.For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Tato metoda závisí na systémové hodiny.This method depends on the system clock. To znamená, že časovou prodlevu bude přibližně rovnat rozlišení systémových hodin. Pokud millisecondsDelay argumentu je menší než rozlišení systémových hodin, což je přibližně 15 milisekund v systémech 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)

Vytvoří úlohu, která se dokončí po zadaný počet milisekund.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

Parametry

millisecondsDelay
Int32 Int32 Int32 Int32

Počet milisekund čekání před dokončením vrácené úlohy nebo -1 pro nekonečně dlouhé čekání.The number of milliseconds to wait before completing the returned task, or -1 to wait indefinitely.

Návraty

Úloha reprezentující čas zpoždění.A task that represents the time delay.

Výjimky

millisecondsDelay Argumentu je menší než -1.The millisecondsDelay argument is less than -1.

Příklady

Následující příklad ukazuje, jednoduché použití Delay metody.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

Poznámky

Delay Metoda se obvykle používá pro zadaný časový interval zpoždění fungování všechny nebo část úkolu.The Delay method is typically used to delay the operation of all or part of a task for a specified time interval. Nejčastěji se používá časovou prodlevu:Most commonly, the time delay is introduced:

  • Ukazuje, na začátku úlohy, jako v následujícím příkladu.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
    
  • Nějakou dobu, zatímco úloha spouští.Sometime while the task is executing. V takovém případě volání Delay metoda spustí jako podřízená úloha v rámci úkolu, jak ukazuje následující příklad.In this case, the call to the Delay method executes as a child task within a task, as the following example shows. Všimněte si, že od úloha, která volá Delay metoda provádí asynchronně, nadřazená úloha musí čekat na dokončení pomocí await – klíčové slovo.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
    

Po dobu zpoždění je úkol dokončen v RanToCompletion stavu.After the specified time delay, the task is completed in the RanToCompletion state.

Tato metoda závisí na systémové hodiny.This method depends on the system clock. To znamená, že časovou prodlevu bude přibližně rovnat rozlišení systémových hodin. Pokud millisecondsDelay argumentu je menší než rozlišení systémových hodin, což je přibližně 15 milisekund v systémech 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)

Vytvoří úlohu, která skončí po uplynutí zadaného časového intervalu.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

Parametry

delay
TimeSpan TimeSpan TimeSpan TimeSpan

Časový interval pro čekání před dokončením vrácené úlohy nebo TimeSpan.FromMilliseconds(-1) čekat po neomezenou dobu.The time span to wait before completing the returned task, or TimeSpan.FromMilliseconds(-1) to wait indefinitely.

Návraty

Úloha reprezentující čas zpoždění.A task that represents the time delay.

Výjimky

delay představuje záporný časový interval jiné než TimeSpan.FromMilliseconds(-1).delay represents a negative time interval other than TimeSpan.FromMilliseconds(-1).

-nebo--or- delay Argumentu TotalMilliseconds je větší než vlastnost MaxValue.The delay argument's TotalMilliseconds property is greater than MaxValue.

Příklady

Následující příklad ukazuje, jednoduché použití Delay metody.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

Poznámky

Po dobu zpoždění je úkol dokončen v RanToCompletion stavu.After the specified time delay, the task is completed in RanToCompletion state.

Scénáře použití a další příklady naleznete v dokumentaci k Delay(Int32) přetížení.For usage scenarios and additional examples, see the documentation for the Delay(Int32) overload.

Tato metoda závisí na systémové hodiny.This method depends on the system clock. To znamená, že časovou prodlevu bude přibližně rovnat rozlišení systémových hodin. Pokud delay argumentu je menší než rozlišení systémových hodin, což je přibližně 15 milisekund v systémech 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.

Platí pro