Task.Delay 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
시간 지연 후 완료할 작업을 만듭니다.
오버로드
Delay(Int32) |
지정된 시간(밀리초) 후에 완료되는 작업을 만듭니다. |
Delay(TimeSpan) |
지정된 시간 간격 후에 완료되는 작업을 만듭니다. |
Delay(Int32, CancellationToken) |
지정된 시간(밀리초) 후에 완료되는 취소 가능한 작업을 만듭니다. |
Delay(TimeSpan, CancellationToken) |
지정된 시간 간격 후에 완료되는 취소 가능한 작업을 만듭니다. |
Delay(TimeSpan, TimeProvider) |
지정된 시간 간격 후에 완료되는 작업을 만듭니다. |
Delay(TimeSpan, TimeProvider, CancellationToken) |
지정된 시간 간격 후에 완료되는 취소 가능한 작업을 만듭니다. |
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 메서드를 호출하는 작업은 비동기적으로 실행되므로 부모 작업은
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 상태로 완료됩니다.
이 메서드는 시스템 클록에 따라 달라집니다. 즉, millisecondsDelay
인수가 Windows 시스템에서 약 15밀리초인 시스템 클록의 해상도보다 작으면 시간 지연이 시스템 클록의 해상도와 거의 같습니다.
메모
사용되는 시스템 클록은 GetTickCount사용하는 것과 동일한 클록으로, timeBeginPeriod 및 timeEndPeriod변경 내용의 영향을 받지 않습니다.
적용 대상
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
.
반환
시간 지연을 나타내는 작업입니다.
예외
delay
Timeout.InfiniteTimeSpan
이외의 음수 시간 간격을 나타냅니다.
-또는-
예제
다음 예제에서는 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) 오버로드에 대한 설명서를 참조하세요.
이 메서드는 시스템 클록에 따라 달라집니다. 즉, delay
인수가 Windows 시스템에서 약 15밀리초인 시스템 클록의 해상도보다 작으면 시간 지연이 시스템 클록의 해상도와 거의 같습니다.
메모
사용되는 시스템 클록은 GetTickCount사용하는 것과 동일한 클록으로, timeBeginPeriod 및 timeEndPeriod변경 내용의 영향을 받지 않습니다.
적용 대상
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) 오버로드에 대한 설명서를 참조하세요.
이 메서드는 시스템 클록에 따라 달라집니다. 즉, millisecondsDelay
인수가 Windows 시스템에서 약 15밀리초인 시스템 클록의 해상도보다 작으면 시간 지연이 시스템 클록의 해상도와 거의 같습니다.
메모
사용되는 시스템 클록은 GetTickCount사용하는 것과 동일한 클록으로, timeBeginPeriod 및 timeEndPeriod변경 내용의 영향을 받지 않습니다.
적용 대상
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
작업이 완료 될 때까지 기다리는 동안 관찰할 취소 토큰입니다.
반환
시간 지연을 나타내는 작업입니다.
예외
delay
Timeout.InfiniteTimeSpan
이외의 음수 시간 간격을 나타냅니다.
-또는-
작업이 취소되었습니다. 이 예외는 반환된 작업에 저장됩니다.
제공된 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) 오버로드에 대한 설명서를 참조하세요.
이 메서드는 시스템 클록에 따라 달라집니다. 즉, delay
인수가 Windows 시스템에서 약 15밀리초인 시스템 클록의 해상도보다 작으면 시간 지연이 시스템 클록의 해상도와 거의 같습니다.
메모
사용되는 시스템 클록은 GetTickCount사용하는 것과 동일한 클록으로, timeBeginPeriod 및 timeEndPeriod변경 내용의 영향을 받지 않습니다.
적용 대상
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
반환된 작업을 완료하기 전에 대기하거나 무기한 대기할 InfiniteTimeSpanTimeSpan.
- timeProvider
- TimeProvider
delay
해석할 TimeProvider.
반환
시간 지연을 나타내는 작업입니다.
예외
timeProvider
인수는 null
.
적용 대상
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
반환된 작업을 완료하기 전에 대기하거나 무기한 대기할 InfiniteTimeSpanTimeSpan.
- timeProvider
- TimeProvider
delay
해석할 TimeProvider.
- cancellationToken
- CancellationToken
작업이 완료 될 때까지 기다리는 동안 관찰할 취소 토큰입니다.
반환
시간 지연을 나타내는 작업입니다.
예외
timeProvider
인수는 null
.
취소 토큰이 취소되었습니다. 이 예외는 반환된 작업에 저장됩니다.
적용 대상
.NET