gpt4 book ai didi

C# ThreadPool 一个线程阻塞另一个?

转载 作者:行者123 更新时间:2023-11-30 21:14:19 26 4
gpt4 key购买 nike

我有一个 C# 控制台应用程序,其中有一个线程池。在线程池中会有一个类执行一个连续的方法(直到它运行了一段时间或者知道什么时候停止)。该方法连接到 HttpWebResponse 流并继续读取它。

问题是在短时间内所有线程都只做他们的事情,但随后只有一个线程继续显示它的输出,其余线程正在等待该线程。

这是为每个线程执行的方法。

function void ReadStream()
byte[] buf = new byte[8192];

String domain = streamingUrl

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(domain);
HttpWebResponse response = (HttpWebResponse)
request.GetResponse();

Stream resStream = response.GetResponseStream();

string tempString = null;
int count;
do
{
// fill the buffer with data
count = resStream.Read(buf, 0, buf.Length);

if (count != 0)
{
tempString = Encoding.ASCII.GetString(buf, 0, count);

try
{
mySqlManager.SaveResult(tempString);

Console.WriteLine("Been here");
Thread.Sleep(1000);
}
catch (Exception e)
{
}
}
}
while (count > 0);
}

最佳答案

首先,您应该将 responseresStream 包装在 using block 中,以确保它们被正确处理。

其次,在我看来,将长时间运行的线程 放入ThreadPool 并不是最好的主意。 ThreadPool 类的想法是它允许您将相对较小的操作排队,其中为每个操作生成一个新线程会很浪费。如果您的操作需要花费大量时间才能运行,我建议您为每个操作实际创建专用的 Thread 对象。

关于C# ThreadPool 一个线程阻塞另一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6309695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com