我在下面的代碼F#4.0F#執行等待在異步方法list.iteri
let processEscalation escalationAction (escalationEvents:UpdateCmd.Record list) =
printf "%A" Environment.NewLine
printf "Started %A" escalationAction
escalationEvents
|> List.iter (fun x ->
printf "%A" Environment.NewLine
printf "escalation %A for with action: %A" x.incident_id escalationAction
service.PostAction(new Models.Action(x.incident_id, escalationAction, "escalated"))
|> Async.AwaitTask
|> ignore)
let ComposeEscalation() =
let escalationlevels = ["ESC1 REACHED"; "ESC2 REACHED"; "ESC3 REACHED"]
escalationlevels
|> List.map getEscalationEvents
|> List.iteri (fun i x -> processEscalation escalationlevels.[i] x)
其中下面的行是該返回任務
service.PostAction(new Models.Action(x.incident_id, escalationAction, "escalated"))
一個C#異步方法的調用組合升級方法調用了三次processEscalation。 但是,第二個呼叫在第一個呼叫完成之前開始。 如何確保最後一行list.iteri等待並按順序處理它們? 也許processEcalation應該是一個異步計算表達式?
爲什麼'processEscalation'只等待任務'忽略'呢? –
'processEscalation'用於製作web服務請求,但它返回任務。對於這個特定的腳本,我只是將其稱爲副作用,對返回值不感興趣。對不起,我對函數式編程比較陌生,所以我認識到這可能不是最好的方法。 –
Chinwobble