繁体   English   中英

Task.Run() 执行一个线程? 它会提高性能吗?

[英]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还使您有义务awaitWait生成的Task ,以便观察启动线程时可能抛出的异常。 如果您让任务以“即发即弃”的方式运行,那么您的程序可能会突然停止工作,而不会向用户提供任何出现问题的迹象。

除了关于线程池饱和的答案之外,即使线程池未饱和,您也不希望从线程池中阻塞整个线程以进行长时间运行的非异步操作。

但是,在通过StartNewTask构造函数创建任务时,您可以使用LongRunning选项来代替线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM