的任务.Run需要很长时间来启动任务
本文关键字:任务 长时间 启动 Run | 更新日期: 2023-09-27 18:12:37
在我的程序中,我有大约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(() => {
...
});
}
启动这个新任务需要~30/40秒。如果我使用线程,一切正常工作,线程立即启动。为什么?原因是什么?
默认情况下,任务被调度到ThreadPool。当您调度大量任务时,ThreadPool不会创建新线程。在创建新线程之前,它将等待一段时间(基于一些启发式方法)。这就是为什么你注意到你的任务开始延迟的原因。
回到你的问题。如果您的任务是长时间运行的,您应该考虑使用LongRunning
标志。它将指示任务调度程序给它一个新线程;因此,您的任务可以独立运行很长一段时间,而不会影响其他任务。
Task.Factory.StartNew(() =>
{
...
}, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);