什么C#工具存在触发,排队,优先依赖的任务

前端之家收集整理的这篇文章主要介绍了什么C#工具存在触发,排队,优先依赖的任务前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个与数据库交互的C#服务应用程序.它最近从.NET 2.0迁移到.NET 4.0,所以我们可以使用大量的新工具.

我正在寻找指向编程方法或工具/库的指针来处理定义任务,配置它们依赖的任务,排队,优先排序,取消等.

有各种类型的服务:

>数据(用于检索和更新)
>计算(使用数据计算的结果填充一些表)
>报告

这些服务通常依赖于彼此触发,并且是按需触发的,即报告任务可能在其中具有代码

if (IsSomeDependentCalculationrequired())
    PerformDependentCalculation();  // which may trigger further calculations
GenerateRequestedReport();

此外,任何数据修改都可能在某些计算或报告服务上设置“必需”标志(因此报告可能在生成完成之前过期).这些任务的长度从几秒到几分钟不等,并且在事务中执行.

到目前为止,这一直很好,但是它的扩展性不好.有一些基本的设计问题,我正在寻求重写这部分代码.例如,如果两个用户在相似的时间请求相同的报告,则依赖的任务将被执行两次.此外,目前还没有办法取消正在进行的任务.维护从属任务很难等等.

我不是在寻找有关如何实施修复的建议.相反,如果我从头开始在.NET 4中,我正在寻找指向用于这种需求的工具/库的指针.这将是Windows Workflow的好候选人吗?这是Futures是什么?我应该看看还有什么其他图书馆,还有我应该阅读的书籍或博客文章

编辑:Rx Reactive Extensions怎么办?

解决方法

我不认为你的要求适合任何内置的东西.你的要求太具体了.

我建议您在sql数据库周围构建一个排队基础架构的任务.您的任务相当长时间运行(秒),因此在任务调度程序中不需要特别高的吞吐量.这意味着你不会遇到性能障碍.从编程的角度来看,它实际上是一个很好的可管理的任务.

您可能应该构建一个Windows服务或其他一些持续轮询数据库获取新任务或请求的进程.然后,该服务可以对所请求的任务执行任意规则.例如,它可以检测到报告任务已经在运行,而不是计划新的计算.

我的主要观点是,您的要求是具体要求,您需要使用C#代码对其进行编码.您不能使现有的工具符合您的需求.您需要一种编程语言的完整性才能自己做.

编辑:您应该将任务请求与任务执行分开.这允许多方请求刷新一些报告,同时只有一个实际计算正在运行.一旦完成了这个单一的计算,所有的任务请求被标记为已完成.当请求被取消时,不需要取消执行.只有当最后一个请求被取消时,任务执行也被取消.

编辑2:我不认为工作流是解决方案.工作流程通常彼此分开操作.但你不想要那个.您希望拥有涵盖多个任务/工作流的规则.您将使用基于工作流的模型来处理系统.

编辑3:关于TPL(Task Parallel Library)的几个字.你提到它(“期货”).如果你想要一些启发任务如何一起工作,如何创建依赖关系以及如何组合任务,请查看任务并行库(特别是Task和TaskFactory类).你会发现一些很好的设计模式,因为它是非常好的设计.以下是您如何建立一系列任务:您调用Task.ContinueWith将会将续延函数注册为新任务.以下是您如何建立依赖关系:TaskFactory.WhenAll(Task [])启动仅在其所有输入任务完成时运行的任务.

但是:TPL本身可能不太适合您,因为它的任务无法保存到磁盘.当您重新启动服务器或部署新代码时,所有现有任务都将被取消,并且进程中止.这可能是不可接受的.请使用TPL作为灵感.从中学到什么是“任务/未来”,以及如何组成.然后实现你自己的任务形式.

这有帮助吗

猜你在找的C#相关文章