【问题标题】:Does anybody know of good resources for parallel programming patterns/testing using .NET 4.0 tasks?有人知道使用 .NET 4.0 任务进行并行编程模式/测试的良好资源吗?
【发布时间】:2010-08-09 02:48:06
【问题描述】:

我最近请一位开发人员使用 .NET 4.0 的新多线程功能编写一个库。

他做得很好,但我担心任务逻辑在整个代码中重复并且没有很好地封装。

我还担心这会在测试方面产生问题。通常,我通过创建一个接口和一个存根/模拟对象来运行我的测试,从而在代码中创建一个接缝来进行测试。

我想这是可能的使用这种做事方式。看起来生产代码逻辑与测试逻辑有很大不同。

解决方案是否也可以进行并行测试,并在其中重复任务逻辑?或者人们是否已经想到了可以封装大部分任务处理逻辑以便于复制的模式?

谢谢!

Task task = Task.Factory.StartNew(() =>
        {
            if(cancellationToken.IsCancellationRequested)
            {
                throw new OperationCanceledException();
            }

            if (_bookHeader.EncryptionType != 0)
            {
                throw new MobiException("The book is encrypted");
            }

            ExtractText();

            partReady(66.66f);
        }, cancellationToken);

        Task opfTask = task.ContinueWith(antecedent =>
            {
                if (antecedent.Status != TaskStatus.Canceled)
                {
                    OpfDocument opf = CreateOpf();

                    partReady(80);

                    MobiDocument book = new MobiDocument()
                    {
                        Contents = _mobiHtml,
                        Description = opf,
                        Header = _bookHeader,
                        Sections = _sections
                    };
                    Document = book;


                    GC.Collect();

                    partReady(100);
                }
            });             

        return opfTask;
    }

【问题讨论】:

    标签: multithreading .net-4.0


    【解决方案1】:

    【讨论】:

    • +1 不是想成为一个聪明的王牌,但这个线程是问题的另一个例证。我没有对其他帖子投反对票,但我也没有对它投反对票(说真的,不想在这里讨论任何论点 - 已为此加注星标,并将回来阅读您的推荐)
    【解决方案2】:

    Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4

    本文档提供了详细且 深入了解支持 Microsoft® .NE​​T Framework 4 用于 并行编程。这包括一个 共同平行检验 模式以及它们是如何实现的 没有和有这种新的支持 .NET 框架,以及 涵盖开发的最佳实践 利用并行的并行组件 模式。

    【讨论】:

    • 这肯定是@Mitch Wheat 答案的后来副本?有什么机会可以删除吗?
    • @Ruben Bartelink:人们有时会同时发帖。我认为惩罚那些乐于助人的人是没有意义的:如果这是盛行的话,那么 SO 将不复存在......
    • NOT 建议惩罚,建议不奖励此类事故(我不是建议 Leniel 要么 a)复制了你的,要么 b)没有按足够的 Ctrl-R 或 F5次并且应该这样做)。不是想惹恼任何人。我知道按 ovte 排序会将这些“不会伤害任何人”的东西移到底部,但我个人更希望它不存在。第二种情绪是让它成为一个没有愚蠢诽谤的社区,并为周五浪费的时间感到抱歉:(
    • 当我发布这个答案时,米奇的答案没有我发布的链接。 SO 为您提供了更新帖子的时间范围。这样米奇的回答不会显示更新。
    【解决方案3】:

    如果有可能改进 CLR via C# 3rd Ed by Richter 的最后 3 章,以便更好地掌握 .NET 4 中的并行内容,我会感到惊讶(但很高兴)。(只需阅读 Effective C#, Second Edition 并且可以)对 TPL 和 PL 的报道不一样)

    我觉得这很重要的一个原因是他谈论了很多关于如何使代码干净和可维护的内容(以及他在 PowerThreading 中经常使用的一些东西)。 (万一你不知道这本书,CLR 书,第三版是第二版的重大升级)

    【讨论】:

      猜你喜欢
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-12
      • 2010-10-09
      相关资源
      最近更新 更多