WorkflowInvoker invoker = new WorkflowInvoker(new Workflow1());
for (int i = 0; i < 10; i++)
{
//invoker.InvokeAsync(myOrders);
IAsyncResult result = invoker.BeginInvoke(myOrders,new AsyncCallback(WorkflowCompletedCallback),order);
}
我使用上面的代码来实现异步工作流程。我希望运行这个工作流10次,我有一些与线程池类似的东西,所以10个工作流线程可以同时运行。第二个不需要等待第一个完成它的工作。我的工作流程很简单,它会做一些计算并在屏幕上打印几个句子。运行上面的代码后,我发现似乎一个接一个地调用了10个工作流,而不是我希望同时运行的工作流。什么是异步工作流程的正确方法?谢谢!
更新:在从其他人反馈之后,我也尝试使用workflowapplication异步执行此操作:
WorkflowApplication wfApp = new WorkflowApplication(new Workflow1(), myOrders);
for (int i = 0; i < 10; i++)
{
wfApp.Run();
}
/* Read the end time. */
DateTime stopTime = DateTime.Now;
Console.WriteLine(stopTime);
// Duration
TimeSpan duration = stopTime - startTime;
Console.WriteLine("hours:" + duration.TotalHours);
Console.WriteLine("minutes:" + duration.TotalMinutes);
Console.WriteLine("seconds:" + duration.TotalSeconds);
Console.WriteLine("milliseconds:" + duration.TotalMilliseconds);
以下是运行结果: 4/8/2011 9:57:49 AM 4/8/2011 9:57:50 AM 时间:6.27777777777778E-05 分钟:0.00376666666666667 秒:0.226 毫秒:226 流程订单 客户:10 |运费:NextDay |总价格:250 |运费价格:10 产品ID:1 |数量:5 |价格:50 产品ID:2 |数量:10 |价格:200
它似乎是异步的,但实际上只有一个线程正在运行我的工作流程(而不是主应用程序线程)。但是从输出中我只看到一个线程正在运行我的工作流程。我怎么能让10个线程同时运行工作流程?谢谢!
答案 0 :(得分:0)
如果您正在检查循环中的IAsyncResult
,则会阻止该异步方法完成。提供了IAsyncResult
,以便您可以同步使用异步方法,这不是您在此处尝试的方法。
答案 1 :(得分:0)
你的第二个例子是错误的,因为WorkflowApplication.Run正在阻止。
关于您的第一个示例,请参阅此文章:http://www.codeproject.com/KB/WF/OperationWorkflowInvoker4.aspx
特别是:http://www.codeproject.com/KB/WF/OperationWorkflowInvoker4/Operat1.jpg
看来WorkflowInvoker使用的调度程序策略很可能是单线程的。在此调查或进行自己的线程安排