rmb*_*mbq 1 c# wpf performance multithreading task
在我的程序中我有~40个运行任务,定义如下:
private void StartTryReconnectTask() {
TryReconnectCTKS = new CancellationTokenSource();
TryReconnectTask = new Task(this.TryReconnect, TryReconnectCTKS.Token);
TryReconnectTask.Start();
}
Run Code Online (Sandbox Code Playgroud)
在TryReconnect()内部,有一个无限的while循环,只有在任务被取消时才会停止.这里的一切似乎都很好.
然后我需要在按钮点击上启动任务(不是无限):
private void ExecuteRepairCommand(object o) {
Task.Run(() => {
...
});
}
Run Code Online (Sandbox Code Playgroud)
启动这项新任务需要大约30/40秒.如果我使用线程一切正常,线程立即启动.为什么?是什么原因?
Sri*_*vel 12
默认情况下,任务被安排到ThreadPool.在安排大量任务时,ThreadPool不会创建新线程.它会在创建新线程之前等待一段时间(基于一些启发式).这就是为什么你注意到你的任务开始延迟的原因.我早些时候在这里解释过.
回到你的问题.如果您的任务长时间运行,您应该考虑使用LongRunning标志.它将指示任务计划程序为其提供一个新线程; 所以你的任务可以长时间独立运行而不影响其他任务.
Task.Factory.StartNew(() =>
{
...
}, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1445 次 |
| 最近记录: |