使用Reactive以并行方式运行方法

时间:2013-03-04 14:09:16

标签: c# .net parallel-processing system.reactive

Halo all,我正在寻找RX框架的解决方案。我的C#4.0类将调用2种不同的方法并节省时间,我想并行执行。有没有办法使用Reactive Framework并行运行2种不同的方法?不仅要并行运行这两个方法,还要等待其他方法完成并合并两个结果。示例如下所示:

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

如何运行这两个方法并行运行并相互等待完成并在Subscription部分中将结果组合在一起?

4 个答案:

答案 0 :(得分:5)

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

result.Subscribe(x => Console.WriteLine(x));

答案 1 :(得分:0)

您可以使用zip方法来实现所需的行为。

答案 2 :(得分:-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

答案 3 :(得分:-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);