gpt4 book ai didi

c# - 当发出同步 I/O 调用时,当前线程 (C#) 的 ThreadState 是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 23:41:01 25 4
gpt4 key购买 nike

以下是我的代码:

static int Main(string[] args)
{
Thread current_thread = Thread.CurrentThread;

new Thread(() => { var i = 0; while (++i > 0) { Thread.Sleep(100); Console.WriteLine("Thread: " + current_thread.ManagedThreadId + ", State: " + current_thread.ThreadState + ", I: " + i); } }).Start();

while(true)
{
Console.WriteLine("Thread: " + Thread.CurrentThread.ManagedThreadId + ", State: " + Thread.CurrentThread.ThreadState);

// creating a http request...
// ...
requst.GetResponseStream(); // this is the synchronous call
}
}

输出显示当前线程(主线程)的状态总是ThreadState.Running。那么,为什么,为什么不是 ThreadState.WaitSleepJoin

GetResponseStream() 是同步的。在等待远程响应时,cpu 时间片可以(也应该)放弃给其他线程,对吗? (如果我错了请纠正我)

非常感谢。

最佳答案

是的,它是 WaitSleepJoin。您的示例代码显然是不完整和错误的(例如,您没有启动新线程),因此很难说出为什么您看不到正确的值。您是否总是为 GetResponseStream 创建新请求?

此代码显示了您的预期:

Thread current_thread = Thread.CurrentThread;

new Thread(() =>
{
var i = 0; while (++i > 0)
{
if ((current_thread.ThreadState & System.Threading.ThreadState.WaitSleepJoin) > 0)
Console.WriteLine("Thread: " + current_thread.ManagedThreadId
+ ", State: " + current_thread.ThreadState + ", I: " + i);
}
}
).Start();

while(true)
{
Console.WriteLine("Thread: " + Thread.CurrentThread.ManagedThreadId
+ ", State: " + Thread.CurrentThread.ThreadState);

var request = HttpWebRequest.CreateHttp("http://www.google.com/");

using (var response = request.GetResponse())
{
using (var stream = response.GetResponseStream())
{
stream.Read(new byte[2048], 0, 2048);
}
}
}

棘手的部分是它不会在 WaitSleepJoin 状态中花费大量时间。

关于c# - 当发出同步 I/O 调用时,当前线程 (C#) 的 ThreadState 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29027922/

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