【发布时间】:2015-05-15 13:56:03
【问题描述】:
我有一个 MainMethod 需要并行调用两个方法 Method1 和 Method2。他们都将返回员工列表,但来自不同的数据库。我需要并行调用它们,然后在 MainMethod 中合并 Method1 和 Method2 的结果,然后将结果返回给 MainMethod 的调用者。
如果人们能说出方法的签名必须是什么以及我需要编写什么代码,我的意思是异步/等待关键字,我非常感激。
【问题讨论】:
-
为什么“需要”它们并行?这是一个副本:stackoverflow.com/questions/7320491/…
-
@DStanley - Parallel.Invoke 不是收集结果的方式。
-
@DStanley 也不保证并行运行。
-
代码根本不保证运行 - 确保如果您使用
new Task调用Task.Start执行任务。此外,由于您在执行 get 方法时锁定,长时间运行的部分可能不会并行运行,尽管它会得到正确的结果。 -
这个锁在技术上是正确的,因为它可以防止对结果的多次访问。但是,正如我和@HenkHolterman 在我们的回答者中所做的那样,最好让每个任务运行,获得结果,然后将这些结果连接起来,而不是添加到内联的单一缓冲区。更少的锁定,更少的陷阱(如果你的查询返回一个
IEnumerable<>,它可能直到迭代才真正执行,这仍然可以在锁定中工作)。