Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Reactive并行运行方法_C#_.net_Parallel Processing_System.reactive - Fatal编程技术网

C# 使用Reactive并行运行方法

C# 使用Reactive并行运行方法,c#,.net,parallel-processing,system.reactive,C#,.net,Parallel Processing,System.reactive,总而言之,我一直在寻找RX框架的解决方案。我的C#4.0类将调用两个不同的方法,为了节省时间,我想并行执行。有没有办法使用反应式框架并行运行两种不同的方法?不仅并行运行这两个方法,还应该等待其他方法完成并合并这两个结果。示例如下所示: AccountClass ac = new AccountClass(); string val1 = ac.Method1(); bool val2 = ac.Method2(); 如何并行运行这两个方法并等待彼此完成并将结果合并到订阅部分?您可以

总而言之,我一直在寻找RX框架的解决方案。我的C#4.0类将调用两个不同的方法,为了节省时间,我想并行执行。有没有办法使用反应式框架并行运行两种不同的方法?不仅并行运行这两个方法,还应该等待其他方法完成并合并这两个结果。示例如下所示:

AccountClass ac = new AccountClass();    
string val1 = ac.Method1();  
bool val2 = ac.Method2();
如何并行运行这两个方法并等待彼此完成并将结果合并到订阅部分?

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

尝试以下操作:

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.....
使用System.Threading.Tasks;
字符串val1=null;
布尔值2=假;
var actions=新列表类似于,但更简洁

        string val1 = null;
        bool val2 = false;

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

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

        Parallel.Invoke(new ParallelOptions(), action1, action2);

这比Rx更像是一个
TPL
/
Parallel
问题-这里没有真正需要“基于推送”的功能。这(或者用
combinelatetest
替换
Zip
)可能是最直接的答案,尽管我仍然坚持你不需要使用Rx:)为什么我的答案被否决了?如果能得到谁的评论就好了
        string val1 = null;
        bool val2 = false;

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

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

        Parallel.Invoke(new ParallelOptions(), action1, action2);