我知道 TPL 不一定为并行集中的每个任务创建一个新线程,但它总是至少创建一个线程吗?例如:
private void MyFunc()
{
Task.Factory.StartNew(() =>
{
//do something that takes a while
});
DoSomethingTimely(); //is this line guaranteed to be hit immediately?
}
编辑:澄清一下:是的,我的意思是保证执行 MyFunc()
的线程不会用于执行 //do需要一段时间的事情
。
最佳答案
这取决于当前的默认值 TaskScheduler
是。您几乎可以想象有人在做一些可怕的事情,比如实现一个 SynchronousTaskScheduler
,它在 QueueTask
期间执行任务主体,并在返回之前将其设置为完成。
假设您没有让其他人弄乱您的任务调度程序,您就不必担心。
关于c# - Task.Factory.StartNew() 是否保证至少创建一个新线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9410930/