2012-07-24 4 views
0

WCF 프록시가있는 샘플 WinForms 앱이 있습니다. 내가 결과를 반환하기 전에이 작업을 반환 할 FromAsync을 사용하고 완료 작업에 기다리고 :Task.Factory.FromAsync가 UI 스레드를 차단하는 이유는 무엇입니까?

private bool Foo() { 
    var proxy = new MyProxy(); 
    var request = new ProxyRequest(); 

    var task = Task<ReturnType>.Factory.FromAsync<ProxyRequest>(client.BeginCall, client.EndCall, request, null); 
    task.Wait(); 
    return true; 
} 

UI 스레드가 차단 형태의 버튼 클릭에서이 메소드를 호출. 왜?

답변

6

task.Wait()을 호출 할 때 계속하기 전에 작업이 완료 될 때까지 명시 적으로 기다리고 있기 때문입니다.

+0

작업 제거. 여전히 UI 스레드를 차단합니다. –

+2

@JonasStawski 'task.Wait'을 제거했을 때 사용중인 코드를 게시하는 것이 좋습니다. 게시 한 코드에는 명백한 결함이 있습니다. 분명히 함께 작업하는 코드에는 다른 코드가 있습니다. –

+0

다른 질문을 수행하려고 시도하는 내용을 게시합니다. –

2

task.Wait()으로 전화하고 있습니다. 작업 완료를 위해 호출 스레드에서 동 기적으로 대기합니다.

+0

task.Wait()을 제거하면 여전히 UI 스레드가 차단됩니다. –

관련 문제