Task.Delay Méthode

Définition

Crée une tâche qui se termine après un délai.

Surcharges

Delay(Int32)

Crée une tâche qui se termine après un nombre spécifié de millisecondes.

Delay(TimeSpan)

Crée une tâche qui se termine après un intervalle de temps spécifié.

Delay(Int32, CancellationToken)

Crée une tâche annulable qui se termine après un nombre spécifié de millisecondes.

Delay(TimeSpan, CancellationToken)

Crée une tâche annulable qui se termine après un intervalle de temps spécifié.

Delay(TimeSpan, TimeProvider)

Crée une tâche qui se termine après un intervalle de temps spécifié.

Delay(TimeSpan, TimeProvider, CancellationToken)

Crée une tâche annulable qui se termine après un intervalle de temps spécifié.

Delay(Int32)

Source:
Task.cs
Source:
Task.cs
Source:
Task.cs

Crée une tâche qui se termine après un nombre spécifié de millisecondes.

C#
public static System.Threading.Tasks.Task Delay (int millisecondsDelay);

Paramètres

millisecondsDelay
Int32

Nombre de millisecondes à attendre avant d’effectuer la tâche retournée, ou -1 d’attendre indéfiniment.

Retours

Tâche qui représente le délai d’attente.

Exceptions

L’argument millisecondsDelay est inférieur à -1.

Exemples

L’exemple suivant montre une utilisation simple de la méthode Delay.

C#
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

Remarques

La méthode Delay est généralement utilisée pour retarder l’opération de toute ou partie d’une tâche pour un intervalle de temps spécifié. Le plus souvent, le délai est introduit :

  • Au début de la tâche, comme l’illustre l’exemple suivant.

    C#
    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
    
  • Parfois, pendant l’exécution de la tâche. Dans ce cas, l’appel à la méthode Delay s’exécute en tant que tâche enfant dans une tâche, comme l’illustre l’exemple suivant. Notez que, étant donné que la tâche qui appelle la méthode Delay s’exécute de manière asynchrone, la tâche parente doit attendre qu’elle se termine à l’aide du mot clé await.

    C#
    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
    

Une fois le délai spécifié, la tâche est terminée dans l’état RanToCompletion.

Cette méthode dépend de l’horloge système. Cela signifie que le délai de temps est approximativement égal à la résolution de l’horloge système si l’argument millisecondsDelay est inférieur à la résolution de l’horloge système, soit environ 15 millisecondes sur les systèmes Windows.

Remarque

L’horloge système utilisée est la même horloge utilisée par GetTickCount, qui n’est pas affectée par les modifications apportées avec timeBeginPeriod et timeEndPeriod.

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Delay(TimeSpan)

Source:
Task.cs
Source:
Task.cs
Source:
Task.cs

Crée une tâche qui se termine après un intervalle de temps spécifié.

C#
public static System.Threading.Tasks.Task Delay (TimeSpan delay);

Paramètres

delay
TimeSpan

Intervalle de temps à attendre avant d’effectuer la tâche retournée, ou Timeout.InfiniteTimeSpan d’attendre indéfiniment.

Retours

Tâche qui représente le délai d’attente.

Exceptions

delay représente un intervalle de temps négatif autre que Timeout.InfiniteTimeSpan.

-ou-

La propriété TotalMilliseconds de l’argument delay est supérieure à 4294967294 sur .NET 6 et versions ultérieures, ou Int32.MaxValue sur toutes les versions précédentes.

Exemples

L’exemple suivant montre une utilisation simple de la méthode Delay.

C#
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

Remarques

Une fois le délai spécifié, la tâche est terminée dans RanToCompletion'état.

Pour obtenir des scénarios d’utilisation et des exemples supplémentaires, consultez la documentation relative à la surcharge Delay(Int32).

Cette méthode dépend de l’horloge système. Cela signifie que le délai de temps est approximativement égal à la résolution de l’horloge système si l’argument delay est inférieur à la résolution de l’horloge système, soit environ 15 millisecondes sur les systèmes Windows.

Remarque

L’horloge système utilisée est la même horloge utilisée par GetTickCount, qui n’est pas affectée par les modifications apportées avec timeBeginPeriod et timeEndPeriod.

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Delay(Int32, CancellationToken)

Source:
Task.cs
Source:
Task.cs
Source:
Task.cs

Crée une tâche annulable qui se termine après un nombre spécifié de millisecondes.

C#
public static System.Threading.Tasks.Task Delay (int millisecondsDelay, System.Threading.CancellationToken cancellationToken);

Paramètres

millisecondsDelay
Int32

Nombre de millisecondes à attendre avant d’effectuer la tâche retournée, ou -1 d’attendre indéfiniment.

cancellationToken
CancellationToken

Jeton d’annulation à observer en attendant la fin de la tâche.

Retours

Tâche qui représente le délai d’attente.

Exceptions

L’argument millisecondsDelay est inférieur à -1.

La tâche a été annulée. Cette exception est stockée dans la tâche retournée.

La cancellationToken fournie a déjà été supprimée.

La tâche a été annulée.

Exemples

L’exemple suivant lance une tâche qui inclut un appel à la méthode Delay(Int32, CancellationToken) avec un délai d’une seconde. Avant l’expiration de l’intervalle de délai, le jeton est annulé. La sortie de l’exemple montre que, par conséquent, une TaskCanceledException est levée et que la propriété Status des tâches est définie sur Canceled.

C#
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

Remarques

Si le jeton d’annulation est signalé avant le délai spécifié, un TaskCanceledException résultats de l’exception et la tâche est terminée à l’état Canceled. Sinon, la tâche est terminée dans l’état RanToCompletion une fois que le délai de temps spécifié s’est écoulé.

Pour obtenir des scénarios d’utilisation et des exemples supplémentaires, consultez la documentation relative à la surcharge Delay(Int32).

Cette méthode dépend de l’horloge système. Cela signifie que le délai de temps est approximativement égal à la résolution de l’horloge système si l’argument millisecondsDelay est inférieur à la résolution de l’horloge système, soit environ 15 millisecondes sur les systèmes Windows.

Remarque

L’horloge système utilisée est la même horloge utilisée par GetTickCount, qui n’est pas affectée par les modifications apportées avec timeBeginPeriod et timeEndPeriod.

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Delay(TimeSpan, CancellationToken)

Source:
Task.cs
Source:
Task.cs
Source:
Task.cs

Crée une tâche annulable qui se termine après un intervalle de temps spécifié.

C#
public static System.Threading.Tasks.Task Delay (TimeSpan delay, System.Threading.CancellationToken cancellationToken);

Paramètres

delay
TimeSpan

Intervalle de temps à attendre avant d’effectuer la tâche retournée, ou Timeout.InfiniteTimeSpan d’attendre indéfiniment.

cancellationToken
CancellationToken

Jeton d’annulation à observer en attendant la fin de la tâche.

Retours

Tâche qui représente le délai d’attente.

Exceptions

delay représente un intervalle de temps négatif autre que Timeout.InfiniteTimeSpan.

-ou-

La propriété TotalMilliseconds de l’argument delay est supérieure à 4294967294 sur .NET 6 et versions ultérieures, ou Int32.MaxValue sur toutes les versions précédentes.

La tâche a été annulée. Cette exception est stockée dans la tâche retournée.

La cancellationToken fournie a déjà été supprimée.

La tâche a été annulée.

Exemples

L’exemple suivant lance une tâche qui inclut un appel à la méthode Delay(TimeSpan, CancellationToken) avec un délai de 1,5 seconde. Avant l’expiration de l’intervalle de délai, le jeton est annulé. La sortie de l’exemple montre que, par conséquent, une TaskCanceledException est levée et que la propriété Status des tâches est définie sur Canceled.

C#
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

Notez que cet exemple inclut une condition de concurrence potentielle : elle dépend de la tâche qui exécute de façon asynchrone le délai lorsque le jeton est annulé. Bien que le délai de 1,5 seconde de l’appel à la méthode Delay(TimeSpan, CancellationToken) rend cette hypothèse probable, il est néanmoins possible que l’appel à la méthode Delay(TimeSpan, CancellationToken) puisse retourner avant l’annulation du jeton. Dans ce cas, l’exemple produit la sortie suivante :

Task t Status: RanToCompletion, Result: 42

Remarques

Si le jeton d’annulation est signalé avant le délai spécifié, un TaskCanceledException résultats de l’exception et la tâche est terminée à l’état Canceled. Sinon, la tâche est terminée dans l’état RanToCompletion une fois que le délai de temps spécifié s’est écoulé.

Pour obtenir des scénarios d’utilisation et des exemples supplémentaires, consultez la documentation relative à la surcharge Delay(Int32).

Cette méthode dépend de l’horloge système. Cela signifie que le délai de temps est approximativement égal à la résolution de l’horloge système si l’argument delay est inférieur à la résolution de l’horloge système, soit environ 15 millisecondes sur les systèmes Windows.

Remarque

L’horloge système utilisée est la même horloge utilisée par GetTickCount, qui n’est pas affectée par les modifications apportées avec timeBeginPeriod et timeEndPeriod.

S’applique à

.NET 9 et autres versions
Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Delay(TimeSpan, TimeProvider)

Source:
Task.cs
Source:
Task.cs

Crée une tâche qui se termine après un intervalle de temps spécifié.

C#
public static System.Threading.Tasks.Task Delay (TimeSpan delay, TimeProvider timeProvider);

Paramètres

delay
TimeSpan

Le TimeSpan à attendre avant d’effectuer la tâche retournée, ou InfiniteTimeSpan d’attendre indéfiniment.

timeProvider
TimeProvider

Le TimeProvider avec lequel interpréter delay.

Retours

Tâche qui représente le délai d’attente.

Exceptions

delay représente un intervalle de temps négatif autre que InfiniteTimeSpan.

-ou-

delaypropriété TotalMilliseconds est supérieure à 4294967294.

L’argument timeProvider est null.

S’applique à

.NET 9 et .NET 8
Produit Versions
.NET 8, 9

Delay(TimeSpan, TimeProvider, CancellationToken)

Source:
Task.cs
Source:
Task.cs

Crée une tâche annulable qui se termine après un intervalle de temps spécifié.

C#
public static System.Threading.Tasks.Task Delay (TimeSpan delay, TimeProvider timeProvider, System.Threading.CancellationToken cancellationToken);

Paramètres

delay
TimeSpan

Le TimeSpan à attendre avant d’effectuer la tâche retournée, ou InfiniteTimeSpan d’attendre indéfiniment.

timeProvider
TimeProvider

Le TimeProvider avec lequel interpréter delay.

cancellationToken
CancellationToken

Jeton d’annulation à observer en attendant la fin de la tâche.

Retours

Tâche qui représente le délai d’attente.

Exceptions

delay représente un intervalle de temps négatif autre que InfiniteTimeSpan.

-ou-

delaypropriété TotalMilliseconds est supérieure à 4294967294.

L’argument timeProvider est null.

Le jeton d’annulation a été annulé. Cette exception est stockée dans la tâche retournée.

S’applique à

.NET 9 et .NET 8
Produit Versions
.NET 8, 9