C# StreamReader线程安全问题?可能地

C# StreamReader线程安全问题?可能地,c#,error-handling,thread-safety,streamreader,helpers,C#,Error Handling,Thread Safety,Streamreader,Helpers,我猜这不起作用,因为StreamReader是非线程安全的(不知道如何修复,谷歌没有帮助) 不管怎么说,我一直在试图弄清楚这段代码到底出了什么问题,它80%的时间都能正常工作,其他时候它无法解析传入的数据包,只会丢弃它们 这对于类似http的tcp服务器im写入来说是一个空白。它的工作原理与http数据包完全相同,但“CONTENT-LENGTH”报头告诉它数据包的长度(有效负载)。这就是问题所在。有人能建议我如何改进和修复这个问题吗?因为我完全迷路了 void InternalStar

我猜这不起作用,因为StreamReader是非线程安全的(不知道如何修复,谷歌没有帮助)

不管怎么说,我一直在试图弄清楚这段代码到底出了什么问题,它80%的时间都能正常工作,其他时候它无法解析传入的数据包,只会丢弃它们

这对于类似http的tcp服务器im写入来说是一个空白。它的工作原理与http数据包完全相同,但“CONTENT-LENGTH”报头告诉它数据包的长度(有效负载)。这就是问题所在。有人能建议我如何改进和修复这个问题吗?因为我完全迷路了

    void InternalStart()
    {

        bool continueWhile = true;
        while (continueWhile)
        {
            if (SR.EndOfStream)
            {
                continueWhile = false;
                break;
            }
            if (par_ReadStatus != ReadStatusEnum.WaitingForPayload)
            {
                int charCode = SR.Peek();
                if (charCode == -1)
                {
                    continueWhile = false;
                    break;
                }
                string outputLine = "";
                outputLine = SR.ReadLine();
                ReadLine(outputLine);
            }
            else if (par_ReadStatus == ReadStatusEnum.WaitingForPayload)
            {
                int length = int.Parse(par_ParsingPacket.Attributes["CONTENT-LENGTH"]);
                char[] array = new char[length];
                for (int i = 0; i < length; i++)
                {
                    array.SetValue(Convert.ToChar(SR.Read()), i);
                }
                string payload = new string(array);
                ReadLine(payload);
            }
        }
        if (ReadEnd != null)
        {
            ReadEnd();
        }
    }
void InternalStart()
{
bool continueWhile=true;
while(continueWhile)
{
if(SR.EndOfStream)
{
continueWhile=false;
打破
}
if(par_ReadStatus!=ReadStatusEnum.WaitingForPayload)
{
int charCode=SR.Peek();
如果(字符代码==-1)
{
continueWhile=false;
打破
}
字符串outputLine=“”;
outputLine=SR.ReadLine();
读线(输出线);
}
else if(par_ReadStatus==ReadStatusEnum.WaitingForPayload)
{
int length=int.Parse(par_ParsingPacket.Attributes[“CONTENT-length”]);
字符[]数组=新字符[长度];
for(int i=0;i
StreamReader是非线程安全的(不知道如何修复,谷歌没有帮助)

简单。初级程序员级别:不要从多个线程读取StreamReader。试图这样做的设计是无法理解流是什么以及多线程编程的效率

根本不需要让多个线程访问单个流读取器。您必须在处理数据之前隔离线程,并将流读取器中的线程专门分配给特定线程。如果您想变得专业和快速,您可以像IIS一样工作,在基础结构线程中提取数据,然后将工作数据包馈送到工作队列中,多个线程可以工作

根据性能要求,您可能希望摆脱套接字,并使用异步套接字机制来确保您不会为正在进行的1000个操作浪费1000个线程,这会带来巨大的成本和任何好处

不管怎么说,我一直在想这个代码到底出了什么问题


啊-很好的尝试。遗憾的是,您既没有告诉我们您真正遇到了什么问题,也没有使用线程显示任何代码,因此在最后,您的问题和代码组合起来没有任何意义。

您能否提供有关遇到的错误的更详细信息?可能是重复的