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()
반환 유형
당신은 정말 할 수 기능은 그렇게 할 수 없다await
void
LoadBlahBlah()
void
참고 URL : https://stackoverflow.com/questions/13636648/wait-for-a-void-async-method
'Programing' 카테고리의 다른 글
Octave-Gnuplot-AquaTerm 오류 : 터미널 아쿠아 확장 제목“그림 1”… 알 수없는 터미널 유형 설정” (0) | 2020.06.27 |
---|---|
Swift에서 빈 배열을 만드는 방법은 무엇입니까? (0) | 2020.06.27 |
배치 파일에서 앰퍼샌드를 이스케이프 처리하려면 어떻게해야합니까? (0) | 2020.06.26 |
PHP에서 정적 클래스를 만들 수 있습니까 (C # 에서처럼)? (0) | 2020.06.26 |
ReactJS에서 구성 요소가 제어되지 않은 유형의 텍스트 입력을 제어 오류로 변경하는 중 (0) | 2020.06.26 |