无状态(在谷歌代码上)和Windows工作流之间的比较[关闭]

2024-01-16

我开始认为我应该放弃 Windows WF,转而使用更简单的东西。我不一定需要长时间暂停工作流程执行并稍后恢复它们。然而,我想要一个简单的状态机框架,它具有基本的挂起/恢复/中止(没有序列化)。

我已经下载了来自 Google Code 的无状态框架 http://code.google.com/p/stateless/我将开始使用它,但很想听听其他 .NET 程序员正在使用什么。

EDIT无状态似乎很容易实现,但我确实想知道这是否适合糖果机。在自动化领域,我总是对应该如何使用状态机感到矛盾。尽管我使用“状态机”这个术语,但我的使用比较宽松,因为我使用它更像是流程图。我没有使用状态来表示机器当前所处的模式,而是使用它来执行函数。因此,在这种无状态的情况下,我实际上会使用从一种状态到下一种状态的转换作为调用糖果机控制器中的函数的机制。想法?


当我完成这个工作时,我会尝试列出一些我发现的东西。从分析的角度来看,大多数可能有点肤浅(特别是因为我对这两个框架都是新手),但希望它能帮助别人。

无国籍

Pros

  • 开源
  • 语法简洁且易于阅读
  • 谷歌代码的 Mercurial 存储库中有很好的例子
  • 我可以非常快速地将我的 UML 状态图转换为使用无状态的代码。
  • 状态维护非常简单——我可以轻松添加和删除。扩展方法允许我在单独的行上配置状态,这样我就可以注释掉我不想使用的触发器或操作。
  • 将数据传递到状态机或从状态机传递数据很容易,您可以在代码隐藏中按照自己的意愿进行操作。
  • 同样,状态机可以通过多种方式更新GUI。现在,我正在通过界面修改数据,然后 GUI 使用计时器来更新其元素。我也可以使用BackgroundWorker 来做到这一点。
  • 我刚刚开始使用子状态来处理我的 GUI,它需要管理各种状态,如运行、暂停、中止和空闲。暂停状态具有子状态,因为用户可以通过多种方式暂停系统,但恢复触发器特定于它们暂停的方式。我喜欢能够通过使用轻量级状态机框架来管理 GUI 的启用/禁用和工具提示。

Cons

  • 没有内置的暂停、恢复、中止机制
  • 只有一名开发商支持该项目。不过,我最近遇到的一个问题确实得到了帮助。
  • 如果不小心,可能会被误用。我第一次尝试时错误地实现了状态机框架。它运行了几个月,效果很好,但最终当我运行一个非常长时间运行的进程时,它就死掉了。事实证明,我导致状态处理程序堆积,并且出现了堆栈溢出情况。

Windows 工作流基础

Pros

  • 设计工作流程的图形方法
  • 支持持久化、暂停、恢复、中止工作流程
  • MS 可能有一个庞大的程序员团队来支持这一点
  • GUI 使禁用/重新启用活动变得非常容易

Cons

  • 设计工作流程的图形方法掩盖了这个事情非常复杂的事实
  • 为了使用持久性并获得暂停/恢复/中止,您必须安装并设置“持久性服务”,我还没有弄清楚如何开始工作。我可以很好地设置 SQL 数据库,但在运行时我收到一堆我不明白的错误。
  • 因为它来自 MS,所以你不知道它是否会存在很长时间或完全被丢弃。
  • 错误处理有点奇怪,因为您可以使用代码隐藏或FaultHandler
  • 将数据从 WF 传递到主应用程序很复杂,需要诸如 WCF(另一种我现在没有足够时间充分学习的技术)之类的技术,或者使用ExternalDataExchange 接口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无状态(在谷歌代码上)和Windows工作流之间的比较[关闭] 的相关文章

  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 引用的程序集自动由 Visual Studio 替换

    我有 2 个项目 一个可移植类库和一个常规单元测试项目 在可移植类库中 我使用 NuGet 来引用 Microsoft BCL 可移植包 它附带 2 个程序集 System Threading Tasks dll and System Ru
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐