C#でStreamReaderクラスのReadLine()を使ってTCP/IP通信を行っています。

public NetworkStream netStream;
public StreamWriter serverWriter = null;
public StreamReader serverReader = null;

netStream = server.GetStream();
serverReader = new StreamReader(netStream, Encoding.UTF8);
serverWriter = new StreamWriter(netStream, System.Text.Encoding.GetEncoding("shift_jis"));

// スレッド内の処理
lock (this) {
    while (true) {
        try {
            string message = reader.ReadLine();

            if (message != null) {
                // 受信データの内容を解析
                PerseData(message);
            }
            else {
                result = false;
                break;
            }
        }
        catch (Exception e) {
            if (IsKill) {
                result = false;
                break;
            }
        }
    }
}

このReadLine()はTimeout値を設定していませんので、データが来るか、それともクライアントからのDisconnectが来るまで終了しません。
これだと、クライアントが異常終了してしまう、または通信ができない状態になると、ReadLine()から永久に抜けられなくなります。

そこで、クライアントからではなく、自身でReadLine()を抜ける正攻法というのをご存知の方おられますでしょうか?以前Timeout値を設定して行っていたのですが、Timeout値だと一度だけしかきかないので別の方法を探しております。