2014-12-02 2 views
0

나는이 방법이 있습니다 myMethod02이 myMethod01를 호출 할 때, myMethod01이 코드를 완료하는 것이 기다림없이 더 많은 코드 //의 실행을 계속 어떻게 보조 비동기 메서드의 반환을 기다리고 있을까요?

private async void myMethod01() 
{ 
    await myAynchMethod(); 

    //more code 
} 


private void myMethod02() 
{ 
    //code 
    myMethod01(); 
    //more code 
} 

내가 코드를 실행

.

이는 myMethod01을 기다리는 중일 때 mymethod01을 호출 한 후 실행 지점을 myMethod02로, myMethod02를 다음 코드 행으로 반환하기 때문입니다.

내가 myMethod02의 실행을 마칠 때까지 myMethod02에서 대기 할 수있는 방법이 있는지 알고 싶습니다

.

나는 그것이 가능하다면 그 myMethod01가 작업을 반환하지 않습니다 싶습니다.

감사합니다 순전히.

+2

당신은 항상'.Wait()를 사용할 수'그런데 왜 당신은 작업을 반환'myMethod01'를 싶지 않아? 관련 내용 : http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html –

+2

'async void'는 비동기 이벤트 핸들러를 허용하는 것입니다. –

+0

.wait()을 사용하면 어떤 이유로 응용 프로그램이 멈 춥니 다. 내가 사용하면 같은 결과를 얻으려고합니다. –

답변

3

myMethod01이 실행을 마칠 때까지 myMethod02에서 기다리는 방법이 있는지 알고 싶습니다.

그리고

나는 그것이 가능하다면 작업을 반환하지 않습니다 myMethod01을하고 싶습니다.

두 개의 충돌하는 문장이다. synchorounsly 이 완료 될 때까지 Method01이 완료되고 비동기이면 을 기다리는 유형을으로 반환해야합니다. 이것은이 GetAwaiter 방법을 구현하는 INotifyCompletion 또는 ICriticalNotifyCompletion를 구현하는 awaiter을 반환하는 사용자 정의 유형이 될 수 있습니다, 반드시 Task 일 필요는 없습니다.

void 메서드를 반환하지 않고 비동기 적으로 완료 될 때까지 기다릴 수는 있지만 그건 의미가 없습니다. 대신 간단히 코드를 동 기적으로 실행할 수 있습니다.

+1

최종 해결책은 mymethod01에서 작업을 반환하며,이 방법으로 myMethod02에서 기다릴 수 있습니다. –

관련 문제