Development Tip

Thread.Sleep 대 Task.Delay?

yourdevel 2021. 1. 8. 22:30
반응형

Thread.Sleep 대 Task.Delay?


Thread.Sleep스레드 차단 한다는 것을 알고 있습니다.

그러나 Task.Delay또한 차단합니까? 아니면 Timer모든 콜백에 대해 하나의 스레드를 사용 하는 것과 같습니다 (겹치지 않을 때)?

( 질문은 차이점을 다루지 않습니다)


MSDN의 문서는 실망 스럽지만 Task.DelayReflector를 사용하여 디 컴파일 하면 더 많은 정보를 얻을 수 있습니다.

public static Task Delay(int millisecondsDelay, CancellationToken cancellationToken)
{
    if (millisecondsDelay < -1)
    {
        throw new ArgumentOutOfRangeException("millisecondsDelay", Environment.GetResourceString("Task_Delay_InvalidMillisecondsDelay"));
    }
    if (cancellationToken.IsCancellationRequested)
    {
        return FromCancellation(cancellationToken);
    }
    if (millisecondsDelay == 0)
    {
        return CompletedTask;
    }
    DelayPromise state = new DelayPromise(cancellationToken);
    if (cancellationToken.CanBeCanceled)
    {
        state.Registration = cancellationToken.InternalRegisterWithoutEC(delegate (object state) {
            ((DelayPromise) state).Complete();
        }, state);
    }
    if (millisecondsDelay != -1)
    {
        state.Timer = new Timer(delegate (object state) {
            ((DelayPromise) state).Complete();
        }, state, millisecondsDelay, -1);
        state.Timer.KeepRootedWhileScheduled();
    }
    return state;
}

기본적으로이 메서드는 작업 내부에 래핑 된 타이머입니다. 예, 마치 타이머와 같다고 말할 수 있습니다.

참조 URL : https://stackoverflow.com/questions/17258428/thread-sleep-vs-task-delay

반응형