我有下面的代碼可以讓我執行一個工作流程。這可以被重複調用。往往是。它也生活在一個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