Programing

void async 메소드 대기

crosscheck 2020. 6. 26. 08:16
반응형

void async 메소드 대기


void async메소드가 작업을 완료하기를 기다리는 방법은 무엇입니까?

예를 들어 다음과 같은 기능이 있습니다.

async void LoadBlahBlah()
{
    await blah();
    ...
}

이제 다른 곳에서 계속하기 전에 모든 것이로드되었는지 확인하고 싶습니다.


가장 좋은 방법은 기능이 async void불인 경우에만 기능을 표시 하고 방법을 잊어 버리고 기다리는 경우에는로 표시해야합니다 async Task.

여전히 기다리고 싶은 경우에는 이렇게 포장하십시오 await Task.Run(() => blah())


함수의 서명을로 변경할 수 있다면 여기에async Task 제시된 코드를 사용할 수 있습니다


가장 좋은 해결책은를 사용하는 것 async Task입니다. async void몇 가지 이유 때문에 작곡가 는 피해야 합니다.

메소드 가 리턴 될 수없는 경우 Task(예 : 이벤트 핸들러 인 경우) SemaphoreSlim종료하려고 할 때 메소드 신호를 갖는 데 사용할 수 있습니다 . 이것을 finally블록 으로하는 것을 고려하십시오 .


AutoResetEvent를 수행하고 함수를 호출 한 다음 AutoResetEvent를 기다린 다음 완료되었음을 알면 async void 안에 설정하십시오.

당신은 또한 당신의 공허 비동기에서 반환 작업을 기다릴 수 있습니다


실제로 수동으로 아무것도 할 필요가 없으며 await키워드 blah()는 반환 될 때까지 함수 실행을 일시 중지 합니다.

private async void SomeFunction()
{
     var x = await LoadBlahBlah(); <- Function is not paused
     //rest of the code get's executed even if LoadBlahBlah() is still executing
}

private async Task<T> LoadBlahBlah()
{
     await DoStuff();  <- function is paused
     await DoMoreStuff();
}

T객체 blah()반환 유형

당신은 정말 할 수 기능은 그렇게 할 수 없다awaitvoidLoadBlahBlah()void

참고 URL : https://stackoverflow.com/questions/13636648/wait-for-a-void-async-method

반응형