聚合匿名类型的任务

米凯尔·尼特尔(Mikael Nitell)

我花了几个小时研究clojurescript代码,并尝试将其使用的某些概念应用于C#。我经常发现我想将一些独立任务的结果聚合为匿名类型,然后将其进行JSON序列化。

我想尝试保持代码的功能,所以最终写了这样的东西

return new 
 {
            A = await CallServiceA(...),
            B = await Task.WhenAll(someData.Select(Task.Factory.Create(()=>CallServiceB(....))
            C = await CallServiceC(...)
 }

但是,看起来运行时将按顺序填充这些属性,这意味着它将首先填充A,然后填充B,然后填充C。

有什么办法可以使属性并行填充,并且仍然使用上述紧凑的语法,而不必分别声明和启动任务,并等待结果如下:

var taskA = Task.Create...
var taskB = Task.WhenAl...
var taskC = Task.Create...
 return new 
     {
                A = await taskA,
                B = await taskB,
                C = await taskC
     }
usr

代码段2是正确的,而代码段1实际上是顺序的(WhenAll输入除外)。如果要声明任务独立,则声明方法是使用表格2。

还请记住,await这不会启动任务。它等待已经运行的任务。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章