【发布时间】:2013-12-26 16:51:50
【问题描述】:
我对多线程应用程序比较陌生。在过去,我已经设法使用异步处理以及后台工作线程来完成我需要的所有线程。
我正在查看一个应用程序,它到处都引用了线程,因此难以阅读和维护。
是否有任何设计模式可以建议封装所有线程的方法?通过封装线程,我的意思是将所有代码放在一个地方。
例如,我曾经支持一个在各处创建数据库事务的应用程序。然后我发现了 UnitOfWork 模式 (http://martinfowler.com/eaaCatalog/unitOfWork.html),它允许您将事务封装在应用程序中。线程有没有类似的方法?
如果所有线程都应该在用户界面层中创建,我也在徘徊。我正在查看的应用程序似乎也在业务逻辑层中创建线程。
【问题讨论】:
-
听起来很难看...需要了解更多...您想做什么?有问题吗?线程的一个问题是基本的线程安全,我需要了解什么是线程以及你想要做什么。你只是想清理吗?新的 TPL 命名空间对于多线程编码非常有效。
-
这可能是一个混乱的应用程序,也可能是您缺乏知识和经验,或两者兼而有之。我建议你从阅读开始,例如albahari.com/threading/threading.pdf。然后使用 TPL 和 PLinq 尽可能多地抽象(但不会更多)。
-
有一次,一个应用程序落到了我的手中。有 15 个计时器在运行和做事——那是丑陋的多线程应用程序。我认为,在
Background Worker和Task之间,你有处理线程的机制。这些实际上是您的“包装器”,因此您不需要使用thread对象或asynchronous delegates。您需要处理系统中的每个特定问题并决定线程机制。有时旋转一个新线程正是您所需要的,有时您需要 Bg Worker 来报告进度,等等。
标签: .net vb.net multithreading design-patterns