gpt4 book ai didi

c# - 为什么子任务不能在 .ContinueWith 之前完成?

转载 作者:行者123 更新时间:2023-11-30 22:11:53 25 4
gpt4 key购买 nike

据我了解,ContinueWith 方法会等待相关任务完成。对于以下代码,这意味着它在完成子任务后就完成了。如果这是真的,为什么它有时会输出0 0 0 和其他时间 0 1 2?

    static void Main(string[] args)
{

Task<Int32[]> parent = Task.Run(() =>
{
var results = new Int32[3];
new Task(() => results[0] = 0, TaskCreationOptions.AttachedToParent).Start();
new Task(() => results[1] = 1, TaskCreationOptions.AttachedToParent).Start();
new Task(() => results[2] = 2, TaskCreationOptions.AttachedToParent).Start();

return results;
});

var finalTask = parent.ContinueWith(n =>
{
foreach (Int32 i in n.Result)
Console.WriteLine(i);
});

finalTask.Wait();

Console.ReadLine();

}

最佳答案

来自 http://blogs.msdn.com/b/pfxteam/archive/2011/10/24/10229468.aspx

When you pass an Action to Task.Run:

Task.Run(someAction);

that’s exactly equivalent to:

Task.Factory.StartNew(someAction, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);

在我看来,这会阻止 children 按预期进行依恋。

确实将开始行更改为

Task<Int32[]> parent = Task.Factory.StartNew(() =>

似乎确实解决了这个问题。通过查看他们在 http://msdn.microsoft.com/en-us/library/dd997417(v=vs.110).aspx 上所做的不同,我得出了这个结论。它使用 Factory.StartNew 方法而不是 Run

话虽如此,我不确定为什么当您尝试附加任务时它没有抛出 InvalidOperationException...

关于c# - 为什么子任务不能在 .ContinueWith 之前完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19999965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com