Я хорошо знаком с использованием APM с классами, которые поддерживают APM. Однако у класса HttpWebRequest есть нюанс, которого я не заметил ни в одном другом классе. И чтобы добавить к путанице, всякий раз, когда я вижу код, который использует HttpWebRequest в асинхронном режиме, он пропускает вопрос, который у меня есть.
Итак, здесь: При выполнении POST с использованием класса HttpWebRequest, по сути, существует два метода, которые необходимо вызывать асинхронно.
- BeginGetRequestStream / EndGetRequestStream
- BeginGetResponse / EndGetResponse
Большая часть кода, который я вижу, пропускает вызов первого и вызывает только второй. Примеры использования Tasks и метода Task.Factory.FromAsync также «удобно» пропустить это.
Я знаю, что соединение устанавливается при вызове метода BeginGetRequestStream. Который связан с вводом / выводом и занимает определенное количество времени.
Итак, мои вопросы: если кто-то заинтересован в том, чтобы сделать это правильно:
- Разве нельзя вызывать методы Begin / End GetRequestStream, а затем также вызывать BeginGetResponse?
- Используя Task.Factory.FromAsync, существует ли простой способ вызвать оба этих метода? Кроме FromAsync, затем продолжить и перейти к другому FromAsync?