【发布时间】:2015-08-07 11:32:50
【问题描述】:
我正在使用以下代码来创建父子任务。父任务的工作只是等待 5 秒,子任务执行并将结果存储在共享资源中。 我已标记子任务需要时间。
其实我不知道创建子线程并开始并行执行的内部机制?
是否有任何我可以知道的文档或是否有任何其他最佳方式来实现父子概念?
List<Task> taskList = new List<Task>();
Task parentTask = Task.Factory.StartNew(() =>
{
int index = 0;
for (int i = 0; i < 10; i++)
{
var task = new Task(() => PrintHello(), TaskCreationOptions.AttachedToParent);
taskList.Add(task);
index++;
}
foreach (Task task in taskList)
{
task.Start();
}
});
//Wait Parent Task.
parentTask.Wait(5000);
编辑:
应用程序太重(平均每秒 5 个请求),它应该在 5 秒内给出响应。
我正在使用任务以获得更好的性能。 除了并行任务还有其他方法吗?
【问题讨论】:
-
任务不是线程。您不一定要在这里创建一个新线程。线程没有父级。任务可以有父项。
-
您要解决的实际问题是什么?为什么要在任务之间建立父子关系?为什么要创建冷任务?几乎可以肯定有更好的方法来解决实际问题。例如,使用
Parallel.Invoke或使用Task.WhenAll等待一系列实时任务完成 -
@Gusdor - 你是对的。我的意思是儿童任务需要时间。我从stackoverflow.com/questions/13429129/task-vs-thread-differences 发现的线程和任务不同。
-
查看 System.ComponentModel.BackgroundWorker
-
@AdamFinley BackgroundWorker 已经过时并且只适用于 WinForms 应用程序。它不能在不同任务之间创建任何类型的关系、执行延续等。它与调用
Task.Run并使用Progress对象报告事件本质上是一样的,只是有组件开销并且无法组合多个操作
标签: c# multithreading task