Async.Parallel没有运行列表|> Async.Parallel |> Async.Ignore |> Async.Start吗?

时间:2019-08-09 21:27:57

标签: f#

我有以下代码来测试https://github.com/fsprojects/FSharpx.Async/blob/master/src/FSharpx.Async/BlockingQueueAgent.fs

但是,它在末尾打印 <View style={{ elevation: 3, shadowColor: Colors.black, shadowOffset: { width: 0, height: 3 }, shadowRadius: 2, shadowOpacity: 0.2, ...autocompleteStyle.listView(props) }}> <FlatList keyboardShouldPersistTaps={true} data={props.autocompleteResults.predictions} renderItem={(listItemValue) => renderAutocompleteItem(props, listItemValue) } /> </View> 。似乎Done 0没有运行?

[ enqueue(); enqueue(); enqueue() ]

1 个答案:

答案 0 :(得分:1)

您似乎处于竞争状态:ag.Add None发生在enqueue副本甚至没有运行之前,因为您正在使用Async.Start在后​​台线程上启动它们。为了维持正确的操作顺序,请将它们全部纳入单个异步工作流程中:

let enqueueAll = async {
    do! [ enqueue(); enqueue(); enqueue() ] |> Async.Parallel |> Async.Ignore
    ag.Add None
}

Async.Start enqueueAll

这样,ag.Add None直到Async.Parallel完成时才执行,这将在enqueue()的所有副本完成之后发生。