【发布时间】:2021-10-15 01:38:39
【问题描述】:
我想在函数完成 5 秒后继续触发它。
以前我会在函数末尾使用这个:
Timer.scheduledTimer(withTimeInterval: 5, repeats: false) { self.function() }
但我想使用Swift 5.5的async/await。
如果我使用这样的东西:
func loadInfo() async {
async let info = someOtherAsyncFunc()
self.info = try? await info
await Task.sleep(5_000_000_000)
await loadInfo()
}
我收到警告,Function call causes an infinite recursion 并不能真正取消。
这编译得很好:
func loadInfo() async {
Task {
async let info = someOtherAsyncFunc()
self.info = try? await info
await Task.sleep(5_000_000_000)
if Task.isCancelled {
print("Cancelled")
}
else
{
print("Not cancelled")
await loadInfo()
}
}
}
虽然它每 5 秒触发一次,但当我的 SwiftUI 视图被关闭时它会继续运行。
我开始使用:
.onAppear {
loadInfo()
}
因为它都在同一个Task 而不是detached 上运行,所以当视图被移除时它不应该全部取消吗?
使用async/await 实现这一目标的现代方法是什么?
【问题讨论】:
标签: swift async-await swiftui swift5.5 swift-concurrency