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
'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 |