为什么子任务无法在.ContinueWith之前完成?

橙色仙人掌

据我了解,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

将Action传递给Task.Run时:

Task.Run(someAction);

完全等同于:

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

在我看来,这将阻止孩子按预期进行附着。

确实将起跑线更改为

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

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

话虽这么说,但我不确定InvalidOperationException在尝试附加任务时为什么没有抛出一个...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

任务不等待ContinueWith完成

来自分类Dev

为什么程序在异步完成任务之前退出?

来自分类Dev

为什么我的解析任务有时无法完成?

来自分类Dev

Task.ContinueWith()父任务不等待子任务完成

来自分类Dev

什么子类导致静态父方法?还是不可能完成任务?

来自分类Dev

C#异步任务在完成之前完成

来自分类Dev

NodeJS异步在任务完成之前完成

来自分类Dev

Android异步任务在Firebasequery完成之前完成

来自分类Dev

如何等待直到Task.ContinueWith内部任务完成

来自分类Dev

如何制作透明的ContinueWith回调以转发任务完成信息?

来自分类Dev

如何制作透明的ContinueWith回调以转发任务完成信息?

来自分类Dev

为什么在我的代码通过等待命令之前此任务未完成

来自分类Dev

为什么子进程在父进程调用wait()函数之前没有退出?

来自分类Dev

当ExecutorService上的所有任务完成或取消时,为什么awaitTermination无法可靠地返回

来自分类Dev

在用户取消任务之前让任务完成

来自分类Dev

为什么原来的任务在ContinueWith其他项目时被取消?

来自分类Dev

在任务完成之前关闭WPF窗口

来自分类Dev

在完成所有任务之前,关闭ThreadPoolExecutor

来自分类Dev

在任务完成之前关闭WPF窗口

来自分类Dev

承诺在任务完成之前解决火灾

来自分类Dev

在等待任务完成之前返回的函数

来自分类Dev

Task.WhenAll在任务完成之前完成

来自分类Dev

完成处理程序在任务完成之前返回

来自分类Dev

如何让 gulp 在完成之前不完成任务?

来自分类Dev

Chrome为什么在验证之前调用自动完成的网址?

来自分类Dev

为什么jQuery的.animate()在完成动画之前运行“ complete”功能?

来自分类Dev

为什么我的 Lambda 函数在完成请求之前退出?

来自分类Dev

为什么“合并”运算符在源可观测值完成之前完成?

来自分类Dev

完成的c#任务再次运行...为什么?

Related 相关文章

  1. 1

    任务不等待ContinueWith完成

  2. 2

    为什么程序在异步完成任务之前退出?

  3. 3

    为什么我的解析任务有时无法完成?

  4. 4

    Task.ContinueWith()父任务不等待子任务完成

  5. 5

    什么子类导致静态父方法?还是不可能完成任务?

  6. 6

    C#异步任务在完成之前完成

  7. 7

    NodeJS异步在任务完成之前完成

  8. 8

    Android异步任务在Firebasequery完成之前完成

  9. 9

    如何等待直到Task.ContinueWith内部任务完成

  10. 10

    如何制作透明的ContinueWith回调以转发任务完成信息?

  11. 11

    如何制作透明的ContinueWith回调以转发任务完成信息?

  12. 12

    为什么在我的代码通过等待命令之前此任务未完成

  13. 13

    为什么子进程在父进程调用wait()函数之前没有退出?

  14. 14

    当ExecutorService上的所有任务完成或取消时,为什么awaitTermination无法可靠地返回

  15. 15

    在用户取消任务之前让任务完成

  16. 16

    为什么原来的任务在ContinueWith其他项目时被取消?

  17. 17

    在任务完成之前关闭WPF窗口

  18. 18

    在完成所有任务之前,关闭ThreadPoolExecutor

  19. 19

    在任务完成之前关闭WPF窗口

  20. 20

    承诺在任务完成之前解决火灾

  21. 21

    在等待任务完成之前返回的函数

  22. 22

    Task.WhenAll在任务完成之前完成

  23. 23

    完成处理程序在任务完成之前返回

  24. 24

    如何让 gulp 在完成之前不完成任务?

  25. 25

    Chrome为什么在验证之前调用自动完成的网址?

  26. 26

    为什么jQuery的.animate()在完成动画之前运行“ complete”功能?

  27. 27

    为什么我的 Lambda 函数在完成请求之前退出?

  28. 28

    为什么“合并”运算符在源可观测值完成之前完成?

  29. 29

    完成的c#任务再次运行...为什么?

热门标签

归档