我有下面的代码可以让我执行一个工作流程。这可以被重复调用。往往是。它也生活在一个web服务中,因此可能同时有多个电话。这目前的作品。但它很慢,因为每次实例化一个WorkflowRuntime
都很慢。提高Windows工作流程的速度
我该如何改进?
public class ApprovalWorkflowRunner : IApprovalWorkflowRunner
{
private static ILogger Logger { get; set; }
private static IRepository Repository { get; set; }
public ApprovalWorkflowRunner(ILogger logger, IRepository repository)
{
Logger = logger;
Repository = repository;
}
public Request Execute(Action action)
{
var request = new Request();
using (var workflowRuntime = new WorkflowRuntime())
{
workflowRuntime.StartRuntime();
var waitHandle = new AutoResetEvent(false);
workflowRuntime.WorkflowCompleted += ((sender, e) =>
{
waitHandle.Set();
request = e.OutputParameters["gRequest"] as Request;
});
workflowRuntime.WorkflowTerminated += ((sender, e) =>
{
waitHandle.Set();
Logger.LogError(e.Exception, true, action.Serialize());
});
var parameters = new Dictionary<string, object>
{
{"RepositoryInstance", Repository},
{"RequestID", action.RequestID.ToString()},
{"ActionCode", action.ToString()}
};
var instance = workflowRuntime.CreateWorkflow(typeof (ApprovalFlow), parameters);
instance.Start();
waitHandle.WaitOne();
}
return request;
}
}
理想情况下,我想保留WorkflowRuntime的一个副本。但是因为我在CreateWorkflow函数和WorkflowCompleted事件中传递了其他对象,所以我没有看到它是如何工作的。
......我在这里错过了一些简单的东西,这里有一个很好的机会,我的大脑没有告诉我的身体,它今天没有显示出来工作。
它通常acronymed为WF。另外请提及你的.NET版本。版本4.0已经有很多改进。 – Aliostad 2010-09-23 21:22:06
@Aliostad,它是3.5,而不是4.0。这是一个在4可用之前开发的应用程序,我们还没有切换。 – CaffGeek 2010-09-23 21:27:19