Task.Delay 메서드

정의

시간 지연 후 완료되는 작업을 만듭니다.

오버로드

Delay(TimeSpan, TimeProvider, CancellationToken)

지정된 시간 간격 후 완료되는 취소 가능 작업을 만듭니다.

Delay(TimeSpan, CancellationToken)

지정된 시간 간격 후 완료되는 취소 가능 작업을 만듭니다.

Delay(TimeSpan, TimeProvider)

지정된 시간 간격 후 완료되는 작업을 만듭니다.

Delay(TimeSpan)

지정된 시간 간격 후 완료되는 작업을 만듭니다.

Delay(Int32)

지정된 시간(밀리초) 후에 완료되는 작업을 만듭니다.

Delay(Int32, CancellationToken)

지정된 시간(밀리초) 후에 완료되는 취소 가능한 작업을 만듭니다.

Delay(TimeSpan, TimeProvider, CancellationToken)

Source:
Task.cs
Source:
Task.cs

지정된 시간 간격 후 완료되는 취소 가능 작업을 만듭니다.

public:
 static System::Threading::Tasks::Task ^ Delay(TimeSpan delay, TimeProvider ^ timeProvider, System::Threading::CancellationToken cancellationToken);
public static System.Threading.Tasks.Task Delay (TimeSpan delay, TimeProvider timeProvider, System.Threading.CancellationToken cancellationToken);
static member Delay : TimeSpan * TimeProvider * System.Threading.CancellationToken -> System.Threading.Tasks.Task
Public Shared Function Delay (delay As TimeSpan, timeProvider As TimeProvider, cancellationToken As CancellationToken) As Task

매개 변수

delay
TimeSpan

TimeSpan 반환된 작업을 완료하기 전에 기다리거나 InfiniteTimeSpan 무기한 대기할 입니다.

timeProvider
TimeProvider

TimeProvider 를 해석delay할 입니다.

cancellationToken
CancellationToken

작업이 완료되기를 기다리는 동안 관찰할 취소 토큰입니다.

반환

시간 지연을 나타내는 작업입니다.

예외

delayInfiniteTimeSpan 이외의 음의 시간 간격을 나타냅니다.

또는

delayTotalMilliseconds 속성이 4294967294보다 큽다.

timeProvider 인수가 null인 경우

취소 토큰이 취소되었습니다. 이 예외는 반환된 작업에 저장됩니다.

적용 대상

Delay(TimeSpan, CancellationToken)

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

지정된 시간 간격 후 완료되는 취소 가능 작업을 만듭니다.

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
Public Shared Function Delay (delay As TimeSpan, cancellationToken As CancellationToken) As Task

매개 변수

delay
TimeSpan

반환된 작업이 완료되기 전에 대기하는 시간 범위입니다. Timeout.InfiniteTimeSpan는 무기한 대기를 나타냅니다.

cancellationToken
CancellationToken

작업이 완료되기를 기다리는 동안 관찰할 취소 토큰입니다.

반환

시간 지연을 나타내는 작업입니다.

예외

delayTimeout.InfiniteTimeSpan 이외의 음의 시간 간격을 나타냅니다.

또는

delay 인수의 TotalMilliseconds 속성은 .NET 6 이상 버전에서 4294967294 또는 모든 이전 버전의 Int32.MaxValue보다 큽

작업이 취소되었습니다. 이 예외는 반환된 작업에 저장됩니다.

제공된 cancellationToken가 이미 삭제된 경우

예제

다음 예제에서는 1.5초 지연으로 메서드 호출을 Delay(TimeSpan, CancellationToken) 포함하는 작업을 시작합니다. 지연 간격이 경과하기 전에 토큰이 취소됩니다. 예제의 출력은 결과적으로 가 TaskCanceledException throw되고 태스크의 Status 속성이 로 설정되어 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
open System
open System.Threading
open System.Threading.Tasks

let source = new CancellationTokenSource()

let t =
    Task.Run<int>(fun () ->
        task {

            do! Task.Delay(TimeSpan.FromSeconds(1.5), source.Token)
            return 42
        })

source.Cancel()

try
    t.Wait()

with :? AggregateException as ae ->
    for e in ae.InnerExceptions do
        printfn $"{e.GetType().Name}: {e.Message}"

printf $"Task t Status: {t.Status}"

if t.Status = TaskStatus.RanToCompletion then
    printf $", Result: {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

이 예제에는 잠재적인 경합 조건이 포함됩니다. 토큰이 취소될 때 지연을 비동기적으로 실행하는 작업에 따라 달라집니다. 메서드 호출 Delay(TimeSpan, CancellationToken) 의 1.5초 지연으로 인해 해당 가정이 가능하지만 토큰이 취소되기 전에 메서드 호출 Delay(TimeSpan, CancellationToken) 이 반환될 수 있습니다. 이 경우 예제에서는 다음 출력을 생성합니다.

Task t Status: RanToCompletion, Result: 42

설명

취소 토큰이 지정된 시간 지연 TaskCanceledException 전에 신호를 받으면 예외가 발생하며 작업이 상태에서 완료됩니다 Canceled . 그렇지 않으면 지정된 시간 지연이 RanToCompletion 경과하면 작업이 상태에서 완료됩니다.

사용 시나리오 및 추가 예제는 오버로드에 대한 Delay(Int32) 설명서를 참조하세요.

이 메서드는 시스템 클록에 따라 달라집니다. 즉, 인수가 Windows 시스템에서 약 15밀리초인 시스템 클록의 해상도보다 작으면 delay 시간 지연이 시스템 클록의 해상도와 거의 같습니다.

참고

사용되는 시스템 클록은 GetTickCount에서 사용하는 것과 동일한 클록으로, timeBeginPeriodtimeEndPeriod로 변경된 내용의 영향을 받지 않습니다.

적용 대상

Delay(TimeSpan, TimeProvider)

Source:
Task.cs
Source:
Task.cs

지정된 시간 간격 후 완료되는 작업을 만듭니다.

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

매개 변수

delay
TimeSpan

TimeSpan 반환된 작업을 완료하기 전에 기다리거나 InfiniteTimeSpan 무기한 대기할 입니다.

timeProvider
TimeProvider

TimeProvider 를 해석delay할 입니다.

반환

시간 지연을 나타내는 작업입니다.

예외

delayInfiniteTimeSpan 이외의 음의 시간 간격을 나타냅니다.

또는

delayTotalMilliseconds 속성이 4294967294보다 큽다.

timeProvider 인수가 null인 경우

적용 대상

Delay(TimeSpan)

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

지정된 시간 간격 후 완료되는 작업을 만듭니다.

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

반환된 작업이 완료되기 전에 대기하는 시간 범위입니다. Timeout.InfiniteTimeSpan는 무기한 대기를 나타냅니다.

반환

시간 지연을 나타내는 작업입니다.

예외

delayTimeout.InfiniteTimeSpan 이외의 음의 시간 간격을 나타냅니다.

또는

delay 인수의 TotalMilliseconds 속성은 .NET 6 이상 버전에서 4294967294 또는 모든 이전 버전의 Int32.MaxValue보다 큽

예제

다음 예제에서는 메서드를 간단하게 사용하는 방법을 보여 주는 예제입니다 Delay .

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
open System
open System.Threading.Tasks

let t =
    Task.Run<int>(fun () ->
        task {
            do! Task.Delay(TimeSpan.FromSeconds 1.5)
            return 42
        })

t.Wait()
printfn $"Task t Status: {t.Status}, Result: {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 .

사용 시나리오 및 추가 예제는 오버로드에 대한 Delay(Int32) 설명서를 참조하세요.

이 메서드는 시스템 클록에 따라 달라집니다. 즉, 인수가 Windows 시스템에서 약 15밀리초인 시스템 클록의 해상도보다 작으면 delay 시간 지연이 시스템 클록의 해상도와 거의 같습니다.

참고

사용되는 시스템 클록은 GetTickCount에서 사용하는 것과 동일한 클록으로, timeBeginPeriodtimeEndPeriod로 변경된 내용의 영향을 받지 않습니다.

적용 대상

Delay(Int32)

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

지정된 시간(밀리초) 후에 완료되는 작업을 만듭니다.

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

반환된 작업을 완료하기 전에 대기하는 시간(밀리초)입니다. -1은 무기한 대기를 나타냅니다.

반환

시간 지연을 나타내는 작업입니다.

예외

millisecondsDelay 인수가 -1보다 작습니다.

예제

다음 예제에서는 메서드를 간단하게 사용하는 방법을 보여 주는 예제입니다 Delay .

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
open System.Threading.Tasks

let t =
    Task.Run<int>(fun () ->
        task {
            do! Task.Delay 1000
            return 42
        })

t.Wait()
printfn $"Task t Status: {t.Status}, Result: {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 일반적으로 지정된 시간 간격 동안 작업의 전체 또는 일부 작업을 지연하는 데 사용됩니다. 가장 일반적으로 시간 지연이 도입됩니다.

  • 다음 예제와 같이 작업의 시작 부분에 있습니다.

    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
    
        let sw = Stopwatch.StartNew()
    
        let delay =
            Task
                .Delay(1000)
                .ContinueWith(fun _ ->
                    sw.Stop()
                    sw.ElapsedMilliseconds)
    
        printfn $"Elapsed milliseconds: {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
    
  • 작업이 실행되는 동안 가끔. 이 경우 메서드 호출 Delay 은 다음 예제와 같이 작업 내에서 자식 작업으로 실행됩니다. 메서드를 호출 Delay 하는 작업은 비동기적으로 실행되므로 부모 작업은 키워드(keyword) 사용하여 await 완료되기를 기다려야 합니다.

    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
    
        let delay =
            Task.Run<int64>(fun () ->
                task {
                    let sw = Stopwatch.StartNew()
                    do! Task.Delay 2500
                    sw.Stop()
                    return sw.ElapsedMilliseconds
                })
    
        printfn $"Elapsed milliseconds: {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 .

이 메서드는 시스템 클록에 따라 달라집니다. 즉, 인수가 Windows 시스템에서 약 15밀리초인 시스템 클록의 해상도보다 작으면 millisecondsDelay 시간 지연이 시스템 클록의 해상도와 거의 같습니다.

참고

사용되는 시스템 클록은 GetTickCount에서 사용하는 것과 동일한 클록으로, timeBeginPeriodtimeEndPeriod로 변경된 내용의 영향을 받지 않습니다.

적용 대상

Delay(Int32, CancellationToken)

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

지정된 시간(밀리초) 후에 완료되는 취소 가능한 작업을 만듭니다.

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
Public Shared Function Delay (millisecondsDelay As Integer, cancellationToken As CancellationToken) As Task

매개 변수

millisecondsDelay
Int32

반환된 작업을 완료하기 전에 대기하는 시간(밀리초)입니다. -1은 무기한 대기를 나타냅니다.

cancellationToken
CancellationToken

작업이 완료되기를 기다리는 동안 관찰할 취소 토큰입니다.

반환

시간 지연을 나타내는 작업입니다.

예외

millisecondsDelay 인수가 -1보다 작습니다.

작업이 취소되었습니다. 이 예외는 반환된 작업에 저장됩니다.

제공된 cancellationToken가 이미 삭제된 경우

예제

다음 예제에서는 1초 지연으로 메서드에 대한 호출을 Delay(Int32, CancellationToken) 포함하는 작업을 시작합니다. 지연 간격이 경과하기 전에 토큰이 취소됩니다. 예제의 출력은 결과적으로 가 TaskCanceledException throw되고 태스크의 Status 속성이 로 설정되어 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
open System
open System.Threading
open System.Threading.Tasks

let source = new CancellationTokenSource()

let t =
    Task.Run<int>(fun () ->
        task {
            do! Task.Delay(1000, source.Token)
            return 42
        })

source.Cancel()

try
    t.Wait()

with :? AggregateException as ae ->
    for e in ae.InnerExceptions do
        printfn $"{e.GetType().Name}: {e.Message}"

printf $"Task t Status: {t.Status}"

if t.Status = TaskStatus.RanToCompletion then
    printf $", Result: {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 . 그렇지 않으면 지정된 시간 지연이 RanToCompletion 경과하면 작업이 상태에서 완료됩니다.

사용 시나리오 및 추가 예제는 오버로드에 대한 Delay(Int32) 설명서를 참조하세요.

이 메서드는 시스템 클록에 따라 달라집니다. 즉, 인수가 Windows 시스템에서 약 15밀리초인 시스템 클록의 해상도보다 작으면 millisecondsDelay 시간 지연이 시스템 클록의 해상도와 거의 같습니다.

참고

사용되는 시스템 클록은 GetTickCount에서 사용하는 것과 동일한 클록으로, timeBeginPeriodtimeEndPeriod로 변경된 내용의 영향을 받지 않습니다.

적용 대상