#c# #.net #websocket
Вопрос:
ReceiveAsync
Метод имеет 2 версии, одна из которых возвращается Task<WebSocketReceiveResult>
, а другая возвращается ValueTask<ValueWebSocketReceiveResult>
.
Первый принимает ArraySegment<byte>
в качестве аргумента, второй принимает Memory<byte>
.
Какой из них лучше? Я бы выбрал второй, так как Memory<T>
он более новый и более быстрый, чем ArraySegment<T>
. Однако возвращаемые значения отличаются.
ValueWebSocketReceiveResult
пропускает CloseStatus
и CloseStatusDescription
необходим для правильного обращения с заключительным рукопожатием. Как получить эти значения со второй версией?
Стоит ли это того? Это значительно быстрее или лучше в любом случае?
Комментарии:
1. Мне не сразу понятно, почему эти свойства существуют как для типа результата, так и для самого сокета. Являются ли те, что находятся в сокете (которые существуют независимо от того, какой тип результата вы получаете), неадекватными?
2. @Damien_The_Unbeliever, БОЖЕ, спасибо! Я смотрю на код и не вижу его на виду, конечно, они в порядке, я просто забыл о них. Я посмотрел на фрагмент кода, который хотел переработать, и мне было интересно, куда они делись 😉 Кстати, мой рефакторинг заключается в том, чтобы изолировать транспорт от обработки данных, и перемещение этих свойств ближе к транспортному уровню (сокету) — это правильный путь.
3. Более того, на
Close
свойства (изWebSocketReceiveResult
) в моем коде не было ссылок, я просто удалил их, и все тесты (например, 20 из них, включая множество крайних случаев) проходят как ни в чем не бывало.