C# AttachedToParent的用例是什么?
C# AttachedToParent的用例是什么?,c#,task-parallel-library,C#,Task Parallel Library,Task.Run和TaskFactory.StartNew之间的区别之一是默认情况下添加了新的denychildatach选项。但是创建附加的不透明度是有原因的。在什么情况下,您希望使用附加的子任务?我能想到的唯一情况是async Wait使其过时。例如,如果您希望任务等待其子任务,您将等待它们 var parentTask = Task.Run(async () => { await Task.Run(() => Thread.Sleep(1000));
Task.Run
和TaskFactory.StartNew
之间的区别之一是默认情况下添加了新的denychildatach
选项。但是创建附加的不透明度是有原因的。在什么情况下,您希望使用附加的子任务?我能想到的唯一情况是async Wait使其过时。例如,如果您希望任务等待其子任务,您将等待它们
var parentTask = Task.Run(async () =>
{
await Task.Run(() => Thread.Sleep(1000));
Console.WriteLine("parent task completed");
});
但是在.NET4.0中,您必须对它们执行Wait()
。例如
var parentTask = Task.Factory.StartNew(() =>
{
Task.Factory.StartNew(() => Thread.Sleep(1000)).Wait();
Console.WriteLine("parent task completed");
});
与第一个示例不同,这将阻止线程,直到子任务完成。通过附加任务,我们可以获得类似的行为
var parentTask = Task.Factory.StartNew(() =>
{
Task.Factory.StartNew(() => Thread.Sleep(1000), TaskCreationOptions.AttachedToParent)
.ContinueWith(antecedent => Console.WriteLine("parent task completed", TaskContinuationOptions.AttachedToParent);
});
AttachedToParent
的用例是当您有一个嵌套的场景时。即:
AttachedToParent
标志与async
任务一起使用。因此,denychildatach
标志的引入(防止AttachedToParent
生效)