2013-12-09 5 views
0

WP에서 작업 기반 비동기 메서드를 동 기적으로 실행하려고합니다. here에서 코드를 읽은 후 내가 성공하면 시스템 라이브러리에서 비동기 메서드 을 동 기적으로 호출하십시오.WP8에서 동기식으로 작업 기반 비동기 메서드를 실행하십시오.

그러나 각각의 API에 대해 작업 기반 비동기 메소드가 없습니다 (특히 WP에서는 WebRequest.BeginGetResponse). 그래서 내가 쓴 랩 같은 : 그리고, 나는 (? 조금 이상한 난 그냥 테스트를하고있는 중이 야)는 UI 스레드에서 동 기적으로 호출 할 때, 아이러니 무엇을, 내 프로그램 가에 붙어있다

Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, 
     request.EndGetResponse, null); 

request.BeginGetResponse, 그리고 절대로 계속하지 마십시오.

하지만 왜? 동일한 코드를 사용하여 시스템 api와 메소드를 호출합니다. 내 코드에 문제가 있습니까? 또는 다른 무엇인가?

매우 도움을 주셔서 감사합니다.

답변

1

UI 스레드가 차단되어있는 동안 async 메서드가 UI 스레드에서 다시 시작하려고 시도하는 deadlock situation I describe on my blog이 실행중인 것 같습니다.

가장 좋은 해결책은 "async"을 사용하는 것입니다. 즉 동기 호출 방식을 비동기로 변경하는 것이 가장 좋습니다.

+0

예, 당신 말이 맞아요. 고맙습니다. 사실 비동기로 상황을 알았고 UI는 신규 이민자에게 매우 위험합니다. 나는 앞으로의 개발에서 당신의 충고를 따를 것입니다, 매우 감사합니다! –

1

는이 같은 Task.Start를 호출해야합니다

var requestTask = Task<WebResponse>.Factory.FromAsync(request.BeginGetResponse, 
     request.EndGetResponse, null); 

당신이 synchonous 싶은 경우에 당신은 다음 작업에 기다릴 수 있습니다 (실제로 동기 아니기 때문에 나는 가볍게 그 용어를 사용).

Task.Wait(requestTask); 

나는 또한 당신이 당신이 비동기 할 수있는 Async Nuget Package을 추가하는 방법에 대해 생각하고이 작업을 기다리고에게 추천 할 것입니다.

관련 문제