Запускает ли когда-либо Pipelines.Sockets.Unofficial.SocketConnection без запроса? - PullRequest
2 голосов
/ 06 июня 2019

Я использую библиотеку Marc Gravell Pipelines.Sockets.Unofial для получения IDuplexPipe через сокет, но я нахожу случай, когда мне нужно изменить заголовок сообщения перед сбросом. Если я позвоню в Advance, я гарантирую, что он никогда не будет сбрасываться до тех пор, пока я не вызову FlushAsync? Это подразумевается типами (Advance является синхронным, а Flush - нет), но я надеялся, что у кого-то был определенный ответ.

Кроме того, могу ли я разумно записать в точку в буфере после того, как я прошел дальше?

1 Ответ

2 голосов
/ 06 июня 2019

Нет, это не гарантируется.Метод Advance логически фиксирует данные в исходящем канале;когда он зафиксирован, , если в канале есть активный потребитель, он может прочитать это значение и обработать его.Просто чтобы уточнить, метод FlushAsync() специально выполняет две вещи, которые имеют только косвенное отношение:

  • , он обеспечивает пробуждение потребителя (если его еще нет)
  • если существует обратное давление, оно задерживает производитель до тех пор, пока потребитель не сбросит часть обратного давления

могу ли я разумно записать в точку в буферепосле того, как я прошёл мимо этого?

Нет

...