我有一个WPF应用程序,使用多个后台线程来预编译LINQ查询和预缓存一些稍后需要的值。TPL用于通过以下方式启动这些任务:
var newTask = new Task(taskAction, myCancelToken, TaskCreationOptions.LongRunning);
newTask.Start();
这个程序可以运行,任务分发到了多个CPU核上。然而,这些线程引起了高CPU负载,这在UI上是可感知的,会导致界面阻塞甚至冻结,只要线程没有完成。
那么,有没有合理的方法来使UI更顺畅呢?通过研究,我发现不应该给线程特殊优先级。其他人认为频繁使用Thread.Sleep()是一种解决办法,但我认为这种方法已经过时且不太好用。
还有其他方法我不知道吗?是否存在线程优先级方面的实际缺点(据我所知,这在TPL中直接是不可能的)?
提前感谢!