新的 Async/Await 语法看起来很棒!但我想知道如何实现我自己的异步实现。
我偶然发现了这个 API:
- https://developer.apple.com/documentation/swift/task/3862702-suspend(概述
yield
) - https://developer.apple.com/documentation/swift/task/3814840-yield(重命名为
suspend
)
这个 API 允许我在选择时手动挂起任务。问题是,我不确定我应该怎么做,以便从并发中受益而不是避免不良做法。
换句话说,我不知道的最佳实践Task.suspend()
例如:
func example() async {
for i in 0..<100 {
print("example", i)
await Task.suspend() // <-- is this OK?
}
}
一些具体问题:
- 应该多久打电话一次
suspend
? - 应该
suspend
在密集手术之前还是之后调用?(例如:IO、Crypto 等...) - 应该有最大数量的调用
suspend
吗? suspend
密集呼叫的“价格”是多少?- 什么时候不应该打电话
suspend
? - 有没有其他方法来实现这种并发(异步/等待风格,而不是 GCD)
现实生活中的例子,我正在实现一个加密大文件内容的函数,因为它是一个 IO+Crypto 密集型任务,它应该是异步的,我想知道如何使用Task.suspend
(或任何其他异步/等待工具)来实现它异步。