使用Reactive并行运行方法

本文关键字:方法 运行 并行 Reactive 使用 | 更新日期: 2023-09-27 18:02:01

Halo there all,我正在寻找一个解决方案与RX框架。我的c# 4.0类将调用两个不同的方法,为了节省时间,我想并行进行。有什么方法可以使用响应式框架并行运行两个不同的方法吗?不仅并行运行这两个方法,而且一个方法应该等待另一个方法完成并合并两个结果。示例如下:

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

如何在订阅部分并行运行这两个方法并等待对方完成并将结果组合在一起?

使用Reactive并行运行方法

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

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

类似于Rui Jarimba,但更简洁;

        string val1 = null;
        bool val2 = false;
        Action action1 = () =>
        {
            val1 = ac.Method1();
        };
        Action action2 = () =>
        {
            val2 = ac.Method2();
        };
        Parallel.Invoke(new ParallelOptions(), action1, action2);

试试这个:

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