Gaz*_*yer 1 c# multithreading threadpool task-parallel-library
我知道TPL不一定为并行集中的每个任务创建一个新线程,但是它总是创建至少一个吗?例如:
private void MyFunc()
{
Task.Factory.StartNew(() =>
{
//do something that takes a while
});
DoSomethingTimely(); //is this line guaranteed to be hit immediately?
}
Run Code Online (Sandbox Code Playgroud)
编辑:澄清:是的,我的意思是保证执行的线程MyFunc()不会被用来执行//do something that takes a while.
这取决于当前的默认TaskScheduler值.你可以设想某人做一些可怕的事情,比如在SynchronousTaskScheduler执行期间执行任务主体QueueTask并在返回之前将其设置为完成.
假设你没有让别人弄乱你的任务调度程序,你不必担心它.
这取决于"立即"你的意思,但我认为假设TPL不会劫持你当前正在执行的线程来同步运行任务中的代码是合理的,如果这就是你的意思.至少不与正常的调度......你也许可以编写自己的调度器不这样做,但你通常可以假设,StartNew将安排的任务,而不是仅仅运行它内联.
| 归档时间: |
|
| 查看次数: |
2280 次 |
| 最近记录: |