2013-03-05 5 views
0

저는이 코드를 사용하고 있으며 비동기 및 대기와 관련된 몇 가지 질문에 답했습니다. 나는 이전에 "프로젝트"를 닫는 방법을 만들었고 비동기 위임자와 비동기 적으로 사용합니다. 또한 광고 된대로 작동하는 다른 상황에서 사용하기 위해 deserializeAsync() 메서드를 만들었습니다. 그러나 이제는 내 응용 프로그램의 Open Project 기능을 구현하려고합니다. 다른 대리자에서 사용한 비동기 도우미 메서드를 사용하여 메서드를 작성했지만 사용자에게 파일 탐색 대화 상자를 통해 정보를 묻는 메시지가 필요할 때 ok 해결책인지 알 수 없다는 것을 깨달았습니다. 파일 찾아보기 대화 상자를 표시하면 메서드 실행이 멈추고 더 이상 비동기 적이 지 않습니다. 가장 좋은 방법은 무엇입니까?비동기 메서드의 정보 사용자에게 묻습니다.

CloseProjectAsync().Wait(); 

을 그냥 프로젝트 열기 방법은 동 기적으로 모든 것을 실행하거나 내가 "가능한 비동기로"비동기 방식 내가 가지고있는이 방법을 만들 수 있죠을 기다리고의 더 나은 것 보자 : 내 비동기 방법은 다음과 같이 .Wait()해야 하는가?

private async Task OpenProjectAsync() 
{ 
    //get folderPath 
    if (m_OpenFileService.ShowDialog(null) != true) 
     return; 

    await CloseProjectAsync(); 

    await Task.Run(() => { 
     string[] lines = File.ReadAllLines(m_OpenFileService.FileName); 
    }); 

    await DeserializeAsync(something); 
} 
+0

파일 IO 메서드가 이미 비동기 적이므로 새 스레드 풀 스레드를 시작하고 IO 파일 차단 방법을 실행할 필요가 없습니다. – Servy

답변

1

나는 모든 것을 만들 것이다. async. 모달 대화 상자는 약간 불안정합니다. 실제로 블로킹 호출 내에서 중첩 된 메시지 루프를 실행합니다. 이렇게하면 UI 및 기타 비동기 작업이 응답 성있게 유지되지만 재진입 문제가 발생할 수 있습니다. 그러나 Wait보다 더 나은 옵션입니다.

Wait을 사용하려고하면 deadlock problem I describe on my blog으로 빨리 이동합니다.

관련 문제