【发布时间】:2020-08-09 04:23:49
【问题描述】:
在阅读了不同年份发表的多篇文章后,我比以前更加困惑。
我想知道如何确保我创建的任务能够在多个内核上运行??
下面的函数必须处理大量上传到服务器的文件:
private void FileSystemWatcher_Created(object sender, System.IO.FileSystemEventArgs e)
{
var SyncTask = new Task(() =>
{
//DO A LOT OF WORK HERE
});
SyncTask.Start();
}
如果这是否是 4.7.2 .NET 框架的方法,我只是找不到一个直接的答案?
【问题讨论】:
-
推荐使用
Task.Run。另请参阅Task constructor documentation,其中指出使用构造函数仅适用于需要分离任务设置和启动的高级场景,这种情况极为罕见。你也应该等待你的任务。 -
任务将在线程池上运行,它管理如何运行任务以及使用哪个线程
-
好的,如果需要,线程池是否会分配任务在多个内核上运行?
-
通常使用
Task.Run()你可能不关心核心。但是您可以设置 LongRunning 选项来强制创建新的线程。还有一个选项可以考虑使用async/await。这是通过节省线程资源来完成这项工作的方法。是的,它可能使用多个内核。要走的路:转到 .NET Core 3.1。 -
谢谢,我用 Windows 资源监视器测试了 Task.Run(),我可以清楚地看到工作负载通过使用 Task.Run() 平均分布在所有内核中
标签: c# multithreading task-parallel-library multitasking