我有以下代码来测试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() ]
答案 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()
的所有副本完成之后发生。