这里是证明。
有任何想法,这段代码有什么问题吗?
[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;
}
}
}
HttpClient.GetStreamAsync(...).CopyToAsync(...)
相同的问题,它使用了ReadOnlyStream
覆盖了WebExceptionWrapperStream
和ConnectStream
,但仍然存在base.ReadAsync()
没有将 cancellationToken 传递到BeginEndReadAsync()
中的情况。 - SerG