我正在审核Swift document中的修订版并找到以下内容
如果需要捕获并改变输入输出参数,请使用显式本地副本,例如在多线程代码中确保在函数返回之前完成所有变异。
func multithreadedFunction(queue: DispatchQueue, x: inout Int) {
// Make a local copy and manually copy it back.
var localX = x
defer { x = localX }
// Operate on localX asynchronously, then wait before returning.
queue.async { someMutatingOperation(&localX) }
queue.sync {}
}
我有两个问题:
async
然后调用sync
会阻塞队列吗? async
?我一直认为异步任务是立即返回而不等到整个代码块被执行。不应该打电话给sync
? 编辑添加了文档的链接。顺便说一句,我不认为queue
是串行还是并发是不太相关。