如何实现异步工作流

本文关键字:异步 工作流 实现 何实现 | 更新日期: 2023-09-27 17:49:34

        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 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:494/8/2011上午9:57:50小时:6.27777777777778 e-05分:0.00376666666666667秒:0.226毫秒数:226过程顺序客户:10 |发货:次日|总价:250 |运费:10产品数量:1 |数量:5 |价格:50产品编号:2 |数量:10 |价格:200

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

如何实现异步工作流

如果你正在检查循环中的IAsyncResult,它将阻塞,直到async方法完成。提供IAsyncResult是为了让您可以同步地使用异步方法,这不是您在这里要做的。

你的第二个例子是错误的,因为WorkflowApplication。运行被阻塞

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

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

看起来WorkflowInvoker使用的调度策略很可能是单线程的。在这方面进行研究,或者执行您自己的线程调度