본문 바로가기
PROGRAMING📚/Unity📑

[UNITY]Task.ConfigureAwait 메서드

별찌루 2024. 4. 8.
728x90
반응형

Task.ConfigureAwait 메서드

public System.Runtime.CompilerServices.ConfiguredTaskAwaitable 
ConfigureAwait (bool continueOnCapturedContext);

public System.Runtime.CompilerServices.ConfiguredTaskAwaitable 
ConfigureAwait (System.Threading.Tasks.ConfigureAwaitOptions options);

 

 

Task.ConfigureAwait는 사용하면 비동기 작업의 실행 컨텍스트를 제어하여 UI응답성을 향상시키고

데드락을 피하며 성능을 최적화 할 수 있다

 

비동기 작업이 완료 된 후에 이어지는 코드 블록이

어떤 스레드 컨텍스트에서 실행 되어야 하는지를 제어한다

주로 UI 응용 프로그램에서 사용되고, 특히 UI 스레드에서 비동기 작업이 실행 중인 경우

UI 스레드에 다시 돌아가서 UI를 업데이트를 해야할 때 유용하다

public async Task DoSomethingAsync()
{
    // 비동기 작업을 수행합니다.
    await SomeAsyncOperation().ConfigureAwait(false);

    // 여기서 다음 코드가 다른 스레드에서 실행됩니다.
    UpdateUI();
}

 

ConfigureAwait(false)를 사용해서 작업이 완료된 후에도

스레드 컨텍스트를 변경하지 않고 계속 해서 백그라운드 스레드에서 실행 하도록 지정 할 수 있다

위의 코드 같은 경우, SomeAsyncOperation() 가 완료된 후에 UpdateUI() 가 다른 스레드에서 실행되도록 해준다

 

ConfigureAwaite(false) 와 ConfigureAwaite(true) 의 차이

 

두개의 차이는 비동기 작업이 완료된 후에 이어지는 코드가 실행되는 컨텍스트에 차이가 있다

 

ConfigureAwaite(true)는 기본값이고 대부분의 경우에는 생략 할 수 있다

비동기 작업이 완료된 후에 이어지는 코드는 호출된 컨텍스트(주로 호출된 스레드)에서 실행됨

주로 UI 업데이트나 호출된 스레드에 대한 동기화가 필요한 경우에 사용된다

// ConfigureAwait(true)를 사용한 경우
public async Task DoSomethingAsync()
{
    // 비동기 작업을 수행합니다.
    await SomeAsyncOperation().ConfigureAwait(true);

    // 여기서 다음 코드는 호출된 스레드에서 실행됩니다.
    UpdateUI();
}

 

ConfigureAwaite(false)는 비동기 작업이 완료된 후에 이어지는 코드가 현재 컨텍스트와 동립적으로 실행된다

 

주로 CPU 바운드 또는 긴 시간이 소요되는 작업에서 사용된다

UI와는 무관한 백그러운드 스레드에서 작업을 수행하고자 할 때 유용하다 

UI 응답성을 향상시키는데 도움이 된다 UI 스레드를 차단하지 않고 비동기 작업을 수행하고

작업이 완료된 후에 UI를 업데이트 할 수 있다 

// ConfigureAwait(false)를 사용한 경우
public async Task DoSomethingAsync()
{
    // 비동기 작업을 수행합니다.
    await SomeAsyncOperation().ConfigureAwait(false);

    // 여기서 다음 코드는 호출된 스레드와 관계없는 다른 스레드에서 실행됩니다.
    UpdateUI();
}

 

 

 

728x90
반응형

댓글