相关疑难解决方法(0)

具有取消令牌的NetworkStream.ReadAsync永远不会取消

这里的证明.
知道这段代码有什么问题吗?

    [TestMethod]
    public void TestTest()
    {
        var tcp = new TcpClient() { ReceiveTimeout = 5000, SendTimeout = 20000 };
        tcp.Connect(IPAddress.Parse("176.31.100.115"), 25);
        bool ok = Read(tcp.GetStream()).Wait(30000);
        Assert.IsTrue(ok);
    }

    async Task Read(NetworkStream stream)
    {
        using (var cancellationTokenSource = new CancellationTokenSource(5000))
        {
            int receivedCount;
            try
            {
                var buffer = new byte[1000];
                receivedCount = await stream.ReadAsync(buffer, 0, 1000, cancellationTokenSource.Token);
            }
            catch (TimeoutException e)
            {
                receivedCount = -1;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

.net sockets async-await .net-4.5 cancellation-token

30
推荐指数
4
解决办法
2万
查看次数

通过超时取消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
查看次数