C# StreamReader线程安全问题?可能地
我猜这不起作用,因为StreamReader是非线程安全的(不知道如何修复,谷歌没有帮助) 不管怎么说,我一直在试图弄清楚这段代码到底出了什么问题,它80%的时间都能正常工作,其他时候它无法解析传入的数据包,只会丢弃它们 这对于类似http的tcp服务器im写入来说是一个空白。它的工作原理与http数据包完全相同,但“CONTENT-LENGTH”报头告诉它数据包的长度(有效负载)。这就是问题所在。有人能建议我如何改进和修复这个问题吗?因为我完全迷路了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
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个线程,这会带来巨大的成本和任何好处
不管怎么说,我一直在想这个代码到底出了什么问题
啊-很好的尝试。遗憾的是,您既没有告诉我们您真正遇到了什么问题,也没有使用线程显示任何代码,因此在最后,您的问题和代码组合起来没有任何意义。您能否提供有关遇到的错误的更详细信息?可能是重复的