Отмена токена отмены означает закрытие TCP-сокета.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Отмена токена отмены означает закрытие TCP-сокета.

Сообщение Anonymous »

У меня есть очень простое приложение, которое пытается отправлять и получать данные.

Код: Выделить всё

public async Task SendDataAsync(bytes[] data, CancellationToken ct)
{
//Send to wire
await TcpClient.GetStream().WriteAsync(bytes, ct);

//read the reply
var buffer = new byte[256];
var bytesRead = await TcpClient.GetStream().ReadAsync(buffer, ct);
if (bytesRead == 0)
{
Disconnect();
//Shit went down
throw new ModbusExceptions.ConnectionException("Recevied 0 bytes read, socket was closed");
}
}
Раньше я никогда не использовал токены отмены, я просто оставлял их по умолчанию, и у меня никогда не возникало проблем.
Однако сейчас у нас есть случай, где находится TCP-клиент, из которого мы пытаемся прочитать данные. В определенном сценарии он не отвечает (поэтому он получит наши данные, т.е. запись работает), но он не ответит.
В этом случае я бы сидел и ждал вечно на своей линии приема.
Поэтому я теперь добавил тайм-аут с использованием токена отмены на 5 секунд.

Код: Выделить всё

using (var ct = new CancellationTokenSource(5000))
{
await SendDataAsync(bytes, ct.Token);
}
Теперь я заметил, что если этот токен отмены будет отменен. Где-то он закрывает сокет ниже в библиотеке.
Поэтому, если я попытаюсь вызвать await SendDataAsync(bytes, ct.Token); во второй раз. Я получаю исключение, в котором говорится, что вы не можете выполнить эту операцию с неоткрытым сокетом.
Я что-то здесь упускаю?
Конечно, если мой поток запись отменяется, но токен, мне не нужно заново устанавливать новый TCP-сокет с клиентом?
В моем случае я просто хочу подождать 5000 мс, а затем попробовать отправить следующее сообщение снова?

Подробнее здесь: https://stackoverflow.com/questions/790 ... tcp-socket
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Отмена токена отмены означает закрытие TCP-сокета.
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Отмена нескольких задач из одного источника токена отмены
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Отмена фона выполнения задачи, когда пользователь нажимает на кнопку «Отмена
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Отмена фона выполнения задачи, когда пользователь нажимает на кнопку «Отмена
    Anonymous » » в форуме JAVA
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous
  • Как «спать» до тех пор, пока не будет запрошено отмены тайм -аута или отмены
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»