任务开始运行需要几秒钟以上的时间



我正在使用WPFC#开发一个应用程序。我有以下代码:

var tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
Task task = Task.Factory.StartNew(() =>
{
// Some action that returns a boolean - **CODE_A**
}).ContinueWith((task2) =>
{
result= task2.Result;
if (!result)
{
//Another action **CODE_B**
}
});
}, token);

通常,CODE_A立即开始运行,不到一秒钟后,CODE_B开始执行。

但是,有时用Task.Factory.StartNew创建的任务需要5秒以上才能开始(一旦开始,执行就会像往常一样快(。

我不明白为什么任务要花这么长时间才能开始运行?我是否可以以某种方式影响任务优先级,使其在所有场景中都能立即开始运行?我想(这只是一个假设(任务调度程序会安排任务稍后执行吗?有没有办法让我一直强制任务立即运行?

任务在线程池中进行调度(默认情况下(。如果有很多其他任务/线程池的使用情况(尤其是如果创建了长时间运行的任务,但没有标记为长时间运行(,线程池可能需要一段时间才能扩展,以便线程可以执行新排队的项目。

所以,我会把你的系统作为一个整体来看待,看看你是在线程池中投入了太多的工作,还是不恰当地使用了它。

我是否可以以某种方式影响任务优先级,使其在所有场景中立即开始运行?

好吧,您可以手动创建线程并接管所有使用,但请注意,即使在那里,它也不是"立即"的。这就像操作系统选择调度任何新创建的线程一样快。

或者,如果您确实需要代码"立即"运行,请在您已经知道已调度并正在运行的线程上运行它——您自己的当前线程。当然,然后你就失去了要求TPL处理任务的优势,而只是在任务完成时得到通知。并且可能会绑上一根宝贵的线程,比如UI线程。

相关内容

  • 没有找到相关文章

最新更新