c#-使用 thread.sleep() 时,异步编程如何与线程一起工作?
发布时间:2022-05-24 07:35:48 204
相关标签: # flask
假设/前奏:
- 在前面的问题中,我们注意到了线程。睡眠阻止线程请参阅:何时使用任务。延迟,何时使用线程。睡觉
- 我们还注意到控制台应用程序有三个线程:主线程、GC线程和;终结器线程IIRC。所有其他线程都是调试器线程。
- 我们知道async不会启动新线程,而是在同步上下文上运行;仅当方法处于活动状态时才在线程上使用时间。https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/task-asynchronous-programming-model
设置:
在一个示例控制台应用程序中,我们可以看到兄弟代码和父代码都不受线程调用的影响。睡眠,至少直到等待被调用(如果进一步,则未知)。
var sw = new Stopwatch();
sw.Start();
Console.WriteLine($"{sw.Elapsed}");
var asyncTests = new AsyncTests();
var go1 = asyncTests.WriteWithSleep();
var go2 = asyncTests.WriteWithoutSleep();
await go1;
await go2;
sw.Stop();
Console.WriteLine($"{sw.Elapsed}");
Stopwatch sw1 = new Stopwatch();
public async Task WriteWithSleep()
{
sw1.Start();
await Task.Delay(1000);
Console.WriteLine("Delayed 1 seconds");
Console.WriteLine($"{sw1.Elapsed}");
Thread.Sleep(9000);
Console.WriteLine("Delayed 10 seconds");
Console.WriteLine($"{sw1.Elapsed}");
sw1.Stop();
}
public async Task WriteWithoutSleep()
{
await Task.Delay(3000);
Console.WriteLine("Delayed 3 second.");
Console.WriteLine($"{sw1.Elapsed}");
await Task.Delay(6000);
Console.WriteLine("Delayed 9 seconds.");
Console.WriteLine($"{sw1.Elapsed}");
}
问题:如果线程在线程期间被阻止执行。睡眠,它是如何继续处理父母和兄弟姐妹的?有人回答说这是后台线程,但我没有看到多线程后台线程的证据。我错过了什么?
特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报