Task.Run花费很多时间来启动任务(Task.Run takes much time to st

2019-09-27 01:43发布

在我的计划,我有〜40正在运行的任务,等被定义:

private void StartTryReconnectTask() {
       TryReconnectCTKS = new CancellationTokenSource();
       TryReconnectTask = new Task(this.TryReconnect, TryReconnectCTKS.Token);
       TryReconnectTask.Start();
}

里面TryReconnect()有while循环,只有当任务被取消了停止无限。 一切似乎没什么问题在这里。

然后,我要开始按钮上单击任务(不是无限的):

private void ExecuteRepairCommand(object o) {
       Task.Run(() => {
         ...
       });
    }

它采取〜四十零分之三十零秒钟就可以启动这个新的任务。 如果我使用线程一切正常,线程即刻开始。 为什么? 什么原因?

Answer 1:

默认情况下,任务安排到线程池。 当您计划任务很多的线程池不会创建新的线程。 它会等待了一段时间创建新线程(基于一些启发式)前。 这就是为什么你会注意到你的任务开始延迟。 我早先这里解释它 。

回到你的问题。 如果你的任务是长期运行的,你真的应该考虑使用LongRunning标志。 这将指示任务计划程序,给它一个新的线程; 所以你的任务可以独立很长一段时间,而不会影响其他任务的运行。

Task.Factory.StartNew(() =>
{
    ...
}, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default); 


文章来源: Task.Run takes much time to start the task