2013-02-21 2 views
0

На this msdn page Я читаю:Mix синхронные и асинхронные методы HttpWebRequest

Ваше приложение не может смешивать синхронные и асинхронные методы для конкретного запроса. Если вы вызываете метод BeginGetRequestStream, вы должны использовать метод BeginGetResponse для извлечения ответа, .

И наоборот? Если я позвоню BeginGetResponse, чтобы прочитать ответ асинхронно, я также должен использовать BeginGetRequestStream, чтобы написать запрос?

Мои запросы небольшие (100-1000 символов), ответ может быть большим. This post от Jeffrey Richter, похоже, говорит, что в случае небольшой полезной нагрузки это можно сделать синхронно (и без установки свойства ContentLength). Это верно?

ответ

0

технически нет, вы можете синхронно отправлять запрос и обрабатывать ответ асинхронно и вице-вера в зависимости от ваших требований, но это обычно не рекомендуется. Для согласованности выберите подход, который наилучшим образом соответствует вашим потребностям, и реализуйте как запрос/ответ, используя тот же подход.

Пример, на котором вы можете смешивать подходы, - это когда вы отправляете, скажем, запрос на отчет, который может занять некоторое время завершить. Вы хотите отправить запрос синхронно, так как вы хотите, чтобы запрос был полностью отправлен до продолжения (например, учет проблемы подключения при отправке из приложения Windows), но обрабатывайте ответ асинхронно, так как вы не хотите связывать UI, пока вы ждете ответа, чтобы вернуться. Даже тогда, хотя, я по-прежнему рекомендую быть последовательным в вашем подходе для отправки/получения.

+0

Спасибо DiskJunky, я согласен с вами, но почему msdn настолько категоричен? –

+0

В первую очередь я думаю, что это с точки зрения обслуживания. Легче, когда кто-то приходит и смотрит на ваш код, чтобы понять один подход, а не два. Простота и простота чтения всегда являются частью элегантного решения. Что касается MSDN, они должны рекомендовать подход «наилучшей практики» для содействия хорошему кодированию и дизайну – DiskJunky

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