[英]Task.Run() to execute a thread? Does it improve performance?
我正在尝试寻找以下问题的答案。 这样做有意义吗
var task_VeryLongTask = Task.Run(() =>
{
Thread thread1 = new Thread(() => Work_Verylongprocess1());
thread1.Start();
Thread thread2 = new Thread(() => Work_Verylongprocess1());
thread2.Start();
//...more threads until 10
});
这实际上会提高性能还是多余的东西?
不,你不需要那样做。 启动Thread
不是 CPU 密集型或高延迟操作。 它在几微秒内完成。 因此,将这个微不足道的工作卸载到ThreadPool
线程(这就是Task.Run
所做的)不太可能为您的应用程序带来任何好处。 如果ThreadPool
当前已饱和,这甚至可能是有害的,在这种情况下,线程不会立即启动。 使用Task.Run
还使您有义务await
或Wait
生成的Task
,以便观察启动线程时可能抛出的异常。 如果您让任务以“即发即弃”的方式运行,那么您的程序可能会突然停止工作,而不会向用户提供任何出现问题的迹象。
除了关于线程池饱和的答案之外,即使线程池未饱和,您也不希望从线程池中阻塞整个线程以进行长时间运行的非异步操作。
但是,在通过StartNew
或Task
构造函数创建任务时,您可以使用LongRunning选项来代替线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.