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個のワークフロースレッドを同時に実行できます。2番目は最初のものがその仕事を終えるのを待つ必要はありません。私のワークフローは非常に単純で、計算を行い、画面にいくつかの文を印刷します。上記のコードを実行した後、同時に実行したいと思っていたものではなく、10個のワークフローが1つずつ呼び出されているようです。ワークフローを非同期化する正しい方法は何ですか?ありがとうございました!

更新:他の人からのフィードバックの後、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/20119:57:49AM 4/8/2011 9:57:50 AM時間:6.27777777777778E-05分:0.00376666666666667秒:0.226ミリ秒:226プロセス注文顧客:10 | 配送:翌日| 合計金額:250 | 送料:10ProductID:1 | 数量:5 | 価格:50 ProductID:2 | 数量:10 | 価格:200

同期されていないようですが、実際にワークフローを実行しているのは1つのスレッドだけです(メインのアプリケーションスレッドではありません)。しかし、出力から、ワークフローを実行しているスレッドは1つだけであることがわかります。10個のスレッドに同時にワークフローを実行させるにはどうすればよいですか?ありがとうございました!

4

2 に答える 2

0

IAsyncResultループ内をチェックしている場合は、asyncメソッドが完了するまでブロックされます。これIAsyncResultは、非同期メソッドを同期的に使用できるようにするために提供されています。これは、ここで実行しようとしていることではありません。

于 2011-04-08T13:50:13.223 に答える
0

WorkflowApplication.Runがブロックしているため、2番目の例は間違っています。

最初の例については、次の記事を参照してください:http: //www.codeproject.com/KB/WF/OperationWorkflowInvoker4.aspx

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

WorkflowInvokerは、シングルスレッドである可能性が非常に高いディスパッチャー戦略を使用しているようです。これを調査するか、独自のスレッドスケジューリングを行ってください

于 2011-04-08T14:24:06.600 に答える