Я использую TcpClient BeginConnect для создания сокет-соединения с TCP-сервером. Это возвращает IAsyncResult, где CompletedSynchronously имеет значение false, что я и ожидал, по крайней мере, большую часть времени. Я обертываю сокеты NetworkStream в вызове SslStream BeginAuthenticateAsClient, который возвращает IAsyncResult, где CompletedSynchronously имеет значение true. Это действительно удивило меня, так как этот метод совершает многократные поездки на сервер, чтобы сделать рукопожатие. Каждый BeginWrite & BeginRead, который я делаю с этого момента, возвращает IAsyncResult, где CompletedSynchronously имеет значение true.
Я подозреваю, что реализация SslStream не поддерживает асинхронный ввод-вывод. Я собирался подтвердить это, перейдя на сервер без оболочки SSL, но, к сожалению, этот сервер требует SSL, поэтому я не смог.
Если SslStream не поддерживает асинхронность, я планирую обернуть SslStream потоком в памяти, а затем передать его в NetworkStream BeginRead / BeginWrite. К сожалению, я не смогу сделать асинхронное рукопожатие.
Кто-нибудь знает, действительно ли SslStream не поддерживает асинхронный ввод-вывод? Есть ли способ обойти это?
Спасибо.
дан