为数据库操作选择WF CodeActivity和AsyncCodeActivity
本文关键字:CodeActivity AsyncCodeActivity WF 选择 数据库 操作 | 更新日期: 2023-09-27 18:08:48
我对WF还是相当陌生的,所以如果我第一次没有把这个词表达正确,请原谅我。;)
如果你对一个规范化良好的数据库进行选择,使用主键,返回单个记录,在一个相当低的容量环境中(每天几百个请求),是否使用CodeActivity
和AsyncCodeActivity
真的有区别吗?
虽然我对托管和执行有一些额外的研究要做,但在同一时间或几乎同一时间接收多个请求是可能的,但不太可能。我不确定这是否会改变答案。
谢谢!
Microsoft在他们的ExecuteSqlQuery活动中使用了非异步:http://wf.codeplex.com/releases/view/43585
异步活动:"这对于必须执行异步工作的自定义活动非常有用,而不需要保持工作流调度程序线程并阻塞任何可能能够并行运行的活动。"
"作为异步的结果,AsyncCodeActivity可能会在执行期间引起一个空闲点。由于异步工作的易变性质,AsyncCodeActivity总是在活动执行期间创建一个no persist块。这可以防止工作流运行时在异步工作的中间持久化工作流实例,还可以防止在异步代码执行时卸载工作流实例。"
来源:http://msdn.microsoft.com/en-us/library/ee358731.aspx
编辑:我注意到只指出了使用异步的缺点,我会考虑Ron和Tim的回应来做出更好的决定
一般来说,我强烈建议正在进行任何类型I/O的活动开发人员使用AsyncCodeActivity,并尽可能调用底层的Async api。即使查询很短,也可以使用
显然,这不会有什么不同,除非你实际上在你的活动实现中调用Async API。
也就是说,即使它有所不同,它也可能不会在许多应用程序中产生明显的差异。可能原因:
- 查询速度太快了。
- 没有并行运行多个查询。(并行运行许多异步操作比同步操作更快,因此顺序操作。)
- 你没有并行运行大量的工作流,比如需要经历线程争用。