【问题标题】:What is the best way to terminate thread that calls ReadByte method终止调用 ReadByte 方法的线程的最佳方法是什么
【发布时间】:2014-08-06 17:20:47
【问题描述】:

我有一个 SslStream 对象,它在单独线程中运行的无限循环中调用 ReadByte 方法:

private String GetResponse()
{
    var serverResponse = new StringBuilder();

    while (true)
    {
        int byteFromStream = _sslStream.ReadByte();
        if (byteFromStream != -1)
        {
            serverResponse.Append((char)byteFromStream);

            try
            {
                JContainer.Parse(serverResponse.ToString());
                break;
            }
            catch { }
        }
    }

    return serverResponse.ToString();
}

终止此类线程的最佳方法是什么?我无法在中断点之后设置任何超时,因为我真的不知道我应该等待下一个数据多长时间。

提前致谢。

【问题讨论】:

  • 你可以设置一个超时时间,如果标志没有设置退出就循环回来。
  • 不清楚。终止的条件是什么?
  • @Henk Holterman 例如,如果 Disconnect 方法被调用或在 Dispose 方法和析构函数中,我需要终止这个线程
  • 关闭流。你会得到一个 ObjectDisposedException,一定要抓住它并迅速离开。
  • 我不知道同时拨打ReadClose是否安全。从技术上讲,我认为这不是因为文档说实例方法不是线程安全的。但是,您可以更改代码以使用BeginRead 而不是Read。如果您随后调用了Close,它将不会与BeginRead 同时执行(因为该调用将立即返回)。只要确保你真的不会同时给他们打电话。使用lock 之类的。

标签: c# multithreading networking


【解决方案1】:

将线程的IsBackground 属性设置为true

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多