我写了一个类,试图读取服务器发送的字节数据,当我的应用程序结束时,我也希望循环结束,但NetworkStream.Read()
如果没有数据可用,它似乎只是等待。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Threading;
using System.Net;
using System.Threading.Tasks;
namespace Stream
{
class Program
{
private static TcpClient client = new TcpClient("127.0.0.1", 80);
private static NetworkStream stream = client.GetStream();
static void Main(string[] args)
{
var p = new Program();
p.Run();
}
void Run()
{
ThreadPool.QueueUserWorkItem(x =>
{
while (true)
{
stream.Read(new byte[64], 0, 64);
}
});
client.Close();
// insert Console.ReadLine(); if you want to see an exception occur.
}
}
}
使用这段代码,我们会得到
System.IO.IOException
说“无法从传输连接中读取数据:现有连接被远程主机强行关闭”,ObjectDisposedException
说“无法访问已处置的对象”,或System.IO.IOException
说“对 WSACancelBlockingCall 的调用中断了阻塞操作”。
那么我怎样才能安全地结束这种方法呢?