当前位置: 首页 > 编程语言 > C#

如果任务还没有开始,调用Task.wait可能不会等待?分享

时间:2023-04-10 23:29:33 C#

任务还没有开始调用Task.wait可能不会等待?我正在阅读JeffreyRichter的clrbyc#书并感到不舒服,因为任务等待可能并不总是等待我引用“当线程调用Wait方法时,系统检查线程正在等待的任务是否已经开始执行。如果是,调用Wait的线程将阻塞,直到Task完成运行。但是如果Task没有开始执行,则系统可以(取决于TaskScheduler)使用调用Wait的线程来执行任务。如果发生这种情况,则调用Wait的线程不会阻塞;它执行Task并立即返回。有人可以分享更多关于这种情况的见解吗?我认为这是不幸的措辞。并不是Wait调用在任务完成;调用Wait的线程可能最终会执行任务本身,而不仅仅是阻塞空闲。示例代码:使用系统;使用系统线程;使用System.Threading.Tasks;classTest{staticvoidMain(){//确保DemonstrateIssue已经在线程池中被调用//线程...Tasktask=Task.Run((Action)DemonstrateIssue);任务.等待();}staticvoidDemonstrateIssue(){Console.WriteLine("DemonstrateIssue线程:{0}",Thread.CurrentThread.ManagedThreadId);Actionaction=()=>Console.WriteLine("内任务线程:{0}",Thread.CurrentThread.ManagedThreadId);任务task=newTask(action);//调用Start只会安排它...我们可以在它实际执行之前等待//task.Start();任务.等待();每次运行输出:DemonstrateIssue线程:3内部任务线程:3这利用了线程池不会根据需要立即启动线程这一事实-它会等待一段时间以查看现有线程是否可用,然后再启动另一个线程线。如果你添加Thread.Sleep(5000);在调用task.Wait()之前,您会看到这两个任务在不同的线程上结束。以上是C#学习教程:如果任务还没有启动,调用Task.wait可能不会等待?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: