2

こんにちは、私は RX フレームワークを使用したソリューションを探していました。私の C# 4.0 クラスは 2 つの異なるメソッドを呼び出す予定で、時間を節約するために並行して実行したいと考えています。Reactive Framework を使用して 2 つの異なるメソッドを並行して実行する方法はありますか? これら 2 つのメソッドを並行して実行するだけでなく、一方が他方のメソッドが完了するのを待って、両方の結果を結合する必要があります。例を以下に示します。

AccountClass ac = new AccountClass();    
string val1 = ac.Method1();  
bool val2 = ac.Method2();

これらの 2 つのメソッドを並行して実行し、互いに完了してサブスクリプション部分で結果を結合するのを待つ方法を教えてください。

4

4 に答える 4

5
var result = Observable.Zip(
    Observable.Start(() => callMethodOne()),
    Observable.Start(() => callMethodTwo()),
    (one, two) => new { one, two });

result.Subscribe(x => Console.WriteLine(x));
于 2013-03-04T18:31:58.133 に答える
0

zipメソッドを使用して、必要な動作を実現できます。

于 2013-03-04T14:12:16.053 に答える
-1

これを試して:

using System.Threading.Tasks;


string val1 = null;
bool val2 = false;

var actions = new List<Action>();

actions.Add(() =>
{
     val1 = ac.Method1();
});

actions.Add(() =>
{
     val2 = ac.Method2();
});


Parallel.Invoke(new ParallelOptions(), actions.ToArray());

// alternative - using Parallel.ForEach:
// Parallel.ForEach(actions, action => action());

// rest of your code here.....

役立つリンク:

http://tipsandtricks.runicsoft.com/CSharp/ParallelClass.html

于 2013-03-04T14:19:07.200 に答える
-1

Rui Jarimbaに似ていますが、もう少し簡潔です。

        string val1 = null;
        bool val2 = false;

        Action action1 = () =>
        {
            val1 = ac.Method1();
        };

        Action action2 = () =>
        {
            val2 = ac.Method2();
        };

        Parallel.Invoke(new ParallelOptions(), action1, action2);
于 2013-03-04T19:58:00.743 に答える