我有一个与数据库交互的 C# 服务应用程序。它最近从 .NET 2.0 迁移到了 .NET 4.0,因此我们可以使用大量新工具。
我正在寻找指向编程方法或工具/库的指针,以处理定义任务、配置它们所依赖的任务、排队、确定优先级、取消等。
有多种类型的服务:
这些服务通常相互依赖并按需触发,即报告任务,其中可能包含代码,例如
if (IsSomeDependentCalculationRequired())
PerformDependentCalculation(); // which may trigger further calculations
GenerateRequestedReport();
此外,任何数据修改都可能在某些计算或报告上设置Required标志服务,(因此报告可能在完成生成之前就已经过时了)。任务的长度从几秒到几分钟不等,并在事务内执行。
到现在为止一切正常,但扩展性不佳。存在基本的设计问题,我希望重写这部分代码。例如,如果两个用户在相似的时间请求同一份报告,相关任务将被执行两次。此外,目前无法取消正在进行的任务。难以维护依赖任务等。
我不是在寻找有关如何实现修复的建议。相反,我正在寻找指向如果我从头开始使用 .NET 4 时将使用哪些工具/库来满足此类要求的指针。这会是 Windows Workflow 的一个很好的候选者吗? ?这是什么Futures是给?还有其他我应该看的图书馆或我应该阅读的书籍或博客文章吗?
编辑 Rx Reactive Extensions 怎么样? ?
最佳答案
我认为您的要求不符合任何内置内容。您的要求太具体了。
我建议您围绕 SQL 数据库构建任务队列基础结构。您的任务运行时间相当长(几秒),因此您不需要任务调度程序中的特别高的吞吐量。这意味着您不会遇到性能障碍。从编程的角度来看,这实际上是一项非常易于管理的任务。
您可能应该构建一个 Windows 服务或一些其他进程,不断轮询数据库以获取新任务或请求。然后,该服务可以对请求的任务执行任意规则。例如,它可以检测到报告任务已经在运行,而不是安排新的计算。
我的主要观点是您的要求非常具体,您需要使用 C# 代码对其进行编码。您无法使现有工具满足您的需求。您需要编程语言的图灵完整性才能自己完成此操作。
编辑:您可能应该将任务请求与任务执行分开。这允许多方请求刷新某些报告,同时只有一个实际计算在运行。一旦这个单一的计算完成,所有的任务请求都被标记为完成。当请求被取消时,不需要取消执行。只有当最后请求被取消时,任务执行才会被取消。
编辑 2:我不认为工作流程是解决方案。工作流通常彼此分开运行。但你不想要那样。您希望拥有跨越多个任务/工作流程的规则。您将使用基于工作流的模型来处理系统。
编辑 3:关于 TPL(任务并行库)的几句话。你提到了它(“ future ”)。如果您想了解任务如何协同工作、如何创建依赖关系以及如何组合任务,请查看任务并行库(尤其是 Task 和 TaskFactory 类)。你会在那里找到一些不错的设计模式,因为它设计得非常好。以下是如何对一系列任务建模:调用 Task.ContinueWith,它将把一个延续函数注册为一个新任务。以下是您如何建模依赖关系:TaskFactory.WhenAll(Task[]) 启动一个任务,该任务仅在其所有输入任务完成时运行。
但是:TPL 本身可能不太适合您,因为它的任务无法保存到磁盘。当您重新启动服务器或部署新代码时,所有现有任务都会被取消并且进程会中止。这很可能是 Not Acceptable 。请仅使用 TPL 作为灵感。从中学习什么是“任务/ future ”以及如何组合它们。然后实现您自己的任务形式。
这有帮助吗?
关于c# - 有哪些 C# 工具可用于触发、排队、确定相关任务的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9132184/
我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时
如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
我写了一个非常简单的rake任务来尝试找到这个问题的根源。namespace:foodotaskbar::environmentdoputs'RUNNING'endend当在控制台中执行rakefoo:bar时,输出为:RUNNINGRUNNING当我执行任何rake任务时会发生这种情况。有没有人遇到过这样的事情?编辑上面的rake任务就是写在那个.rake文件中的所有内容。这是当前正在使用的Rakefile。requireFile.expand_path('../config/application',__FILE__)OurApp::Application.load_tasks这里
您认为可以作为插件很好地存在于您的Rails应用程序中必须实现的哪些行为?您过去曾搜索过哪些插件功能但找不到?哪些现有的Rails插件可以改进或扩展,如何改进或扩展? 最佳答案 我希望在管理界面中看到一个引擎插件,它提供了应用程序中所有模型的仪表板摘要,以及可配置的事件图表。 关于ruby-on-rails-您希望看到哪些Rails插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio