小编mik*_*ksh的帖子

通过超时取消C#4.5 TcpClient ReadAsync

通过超时取消TcpClient ReadAsync操作并在.NET 4.5中捕获此超时事件的正确方法是什么?

TcpClient.ReadTimeout似乎应用于同步只读.

更新:
Tried tro应用此处描述的方法取消异步操作

var buffer = new byte[4096];
CancellationTokenSource cts = new CancellationTokenSource(5000);
int amountRead = await tcpClientStream.ReadAsync(buffer, 0, 4096, cts.Token);
Run Code Online (Sandbox Code Playgroud)

但它永远不会超时取消.有什么问题吗?

c# timeout tcpclient

5
推荐指数
2
解决办法
6685
查看次数

C#TcpClient ReadAsync读取大型消息

我有一个C#TcpClient来异步读取数据.简化代码如下:

public async Task StartReading(CancellationToken token)
{
    // To fit the largest package
    const int BufferSize = 524288;

    while(true)
    {
         var buffer = new byte[BufferSize];
         int bytesRead = await this.networkStream.ReadAsync(buffer, 0, BufferSize);
                                          .WithWaitCancellation(token);            

            if (bytesRead > 0)
            {
                 Console.Read(string.Fromat("{0} bytes received."));

                 // Run processing at background process
                 Task.Run(() => ProcessData(buffer, bytesRead));
            }
            else
            {
                // If received 0 bytes then a tcp connection is terminated
                break;
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

收到的包可能包含一个或多个以STX开头并以ETX结尾的消息,不会发送包长度.此Feed由第三方提供,不会更改.

在测试期间,似乎服务器以8192个块发送数据,因此消息可能被分成两个后续的块并且无法处理.
这是一个日志:
8192字节收到
消息89处理/ 1失败
8192字节收到
消息89处理/ 2失败
8192字节收到
消息89处理/ …

c# asynchronous tcpclient

1
推荐指数
1
解决办法
2701
查看次数

标签 统计

c# ×2

tcpclient ×2

asynchronous ×1

timeout ×1