我创建了一个执行 Web 请求并将结果存储到数据库中的活动。我发现对于这些长时间运行的活动,我应该编写一些不同的代码,以便工作流引擎线程不会被阻塞。
public sealed class WebSaveActivity : NativeActivity
{
protected override void Execute(NativeActivityContext context)
{
GetAndSave(); // This takes 1 hour to accomplish.
}
}
我应该如何重写此活动以满足长时间运行活动的要求
您可以使用例如在现有进程中生成一个线程ThreadPool.QueueUserWorkItem() https://msdn.microsoft.com/de-de/library/kbf0f1ct(v=vs.110).aspx因此,如果需要,您的工作流程的其余部分将继续运行。不过,请务必首先了解多线程和线程同步的含义。
或者你可以看看Hangfire https://www.hangfire.io/或类似的组件将整个作业卸载到不同的进程中。
EDIT:
根据您的评论,您可以研究基于任务的异步模式(TAP):Link 1 https://learn.microsoft.com/en-us/dotnet/csharp/async, Link 2 https://msdn.microsoft.com/de-de/library/hh873175(v=vs.110).aspx这将为您提供一个编写代码的良好模型,该模型可以在等待长时间运行操作的结果直到返回时继续处理可以完成的事情。但是,我不确定这是否满足您的所有需求。特别是在 Windows Workflow Foundation 中,您可能想要研究某种形式的工作流程休眠/持久化 https://learn.microsoft.com/en-us/dotnet/framework/windows-workflow-foundation/workflow-persistence.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)