0
        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);

以下是运行结果: 2011 年 4 月 8 日上午 9:57:49 2011 年 4 月 8 日上午 9:57:50 小时:6.27777777777778E-05 分钟:0.00376666666666667 秒:0.226 毫秒:226 处理订单客户:10 | 发货:次日 | 总价:250 | 运费:10 产品编号:1 | 数量:5 | 价格:50 产品编号:2 | 数量:10 | 价格:200

它似乎是异步的,但实际上只有一个线程在运行我的工作流程(不是主应用程序线程)。但从输出中我只看到一个线程正在运行我的工作流程。如何让 10 个线程同时运行工作流?谢谢!

4

2 回答 2

0

你的第二个例子是错误的,因为 WorkflowApplication.Run 是阻塞的。

至于您的第一个示例,请参阅这篇文章: http: //www.codeproject.com/KB/WF/OperationWorkflowInvoker4.aspx

特别是:http: //www.codeproject.com/KB/WF/OperationWorkflowInvoker4/Operat1.jpg

WorkflowInvoker 似乎使用了很可能是单线程的调度程序策略。对此进行调查或进行自己的线程调度

于 2011-04-08T14:24:06.600 回答
0

如果您正在检查IAsyncResult循环内部,那将一直阻塞,直到异步方法完成。提供IAsyncResult是为了让您可以同步使用异步方法,这不是您在此处尝试执行的操作。

于 2011-04-08T13:50:13.223 回答