我花了几个小时研究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
}
代码段2是正确的,而代码段1实际上是顺序的(WhenAll
输入除外)。如果要声明任务独立,则声明方法是使用表格2。
还请记住,await
这不会启动任务。它等待已经运行的任务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句