为数据库操作选择WF CodeActivity和AsyncCodeActivity之间

时间:2011-09-14 14:49:03

标签: c# workflow-foundation-4

我仍然是WF的新手,所以如果我第一次没有正确使用这个措辞,请耐心等待。 ;)

如果您正在针对规范化的数据库进行选择,使用主键,在相当低容量的环境中返回单个记录(每天几百个请求),那么使用{{是否真的有所帮助? 1}} vs CodeActivity

虽然我还有一些关于托管和执行的额外研究,但是有可能(但不可能)在同一时间或几乎同时接收多个请求。我不确定这是否会改变答案。

谢谢!

3 个答案:

答案 0 :(得分:5)

Microsoft在其ExecuteSqlQuery活动中使用了非异步:http://wf.codeplex.com/releases/view/43585

异步活动: “这对于必须执行异步工作而不保留工作流程调度程序线程并阻止可能并行运行的任何活动的自定义活动非常有用。”

“由于异步,AsyncCodeActivity可能在执行期间引发空闲点。由于异步工作的易失性,AsyncCodeActivity总是在活动执行期间创建一个无持久阻塞。这可以防止工作流程运行时来自异步工作中间的工作流实例,并且还防止工作流实例在异步代码执行时卸载。“

来源:http://msdn.microsoft.com/en-us/library/ee358731.aspx

编辑:我注意到只指出了使用异步的缺点我会考虑Ron和Tim的回答来做出更好的决定

答案 1 :(得分:5)

总的来说,我强烈建议正在进行任何I / O的活动开发人员使用AsyncCodeActivity并尽可能调用底层的Async API。即使查询很短,也总是优先考虑。

答案 2 :(得分:1)

显然 - 除非您实际在活动实施中调用Async API,否则它不会有所作为。

也就是说,即使它有所不同,它也许不会在许多应用中产生明显的差异。可能的原因:

  • 查询运行得太快。
  • 您没有并行运行多个查询。 (并行运行多个异步操作比同步执行它们更快,从而顺序执行。)
  • 您不会并行运行大量工作流,例如需要经历线程争用。