2013-12-09 4 views
0

Я пытаюсь запустить синхронный метод async на основе WP. После прочтения кода от here. Мне это удалось, вызовите метод асинхронизации из системной библиотеки синхронно.Синхронизировать метод async на основе задачи на WP8

Однако для каждого API не существует асинхронного метода баз задач, особенно в WP, например WebRequest.BeginGetResponse. Так что я написал обертку как:

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

И, что иронично, когда я пытаюсь вызвать его синхронно из потока пользовательского интерфейса (немного Штанги я просто делаю тест?), Моя программа застряло в request.BeginGetResponse, и никогда не продолжайте.

Но почему? Я использую тот же код для вызова системы api и моего метода. В моем коде есть какие-то ошибки? или что-то еще?

очень благодарю за помощь!

ответ

1

Возможно, вы столкнулись с deadlock situation I describe on my blog, где метод async пытается возобновить работу в потоке пользовательского интерфейса при блокировке потока пользовательского интерфейса.

Лучшее решение - использовать «async полностью», то есть изменить метод синхронного вызова на асинхронный.

+0

Да, вы правы, очень благодарю вас. Фактически я нашел ситуацию с асинхронным и пользовательским интерфейсом очень опасен для новичков. Я буду следовать вашим советам в будущем развитии, очень спасибо! –

1

Вам нужно позвонить Task.Start так:

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

Если вы хотите быть Синхронный (я использую этот термин легко, потому что это на самом деле не синхронно) вы можете ждать от задачи.

Task.Wait(requestTask); 

Я также рекомендовал бы вам подумать о добавлении Async Nuget Package, то вы можете ASync и ждать этой задачи.

Смежные вопросы