我花了幾個小時查看clojurescript代碼,並嘗試將其使用的一些概念應用於C#。我經常發現我想要以匿名類型聚合一些獨立任務的結果,然後使用JSON序列化。匿名類型的聚合任務
我想盡量保持我的代碼的功能,所以我寫出來這樣的事情
return new
{
A = await CallServiceA(...),
B = await Task.WhenAll(someData.Select(Task.Factory.Create(()=>CallServiceB(....))
C = await CallServiceC(...)
}
但是,它看起來像運行時將依次填充這些屬性,這意味着它會首先填充,然後是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
}
不是一個答案,但我只想指出,在99%的用例中,Task.Factory.StartNew()是錯誤的(tm)和邪惡(tm)http://blog.stephencleary.com/2013/ 08/startnew-is-dangerous.html – kai