Srđ*_*đan 4 objective-c grand-central-dispatch ios swift
假设我将一个任务异步调度到一个队列:
{
// we are on main queue
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
print("task B")
});
print("task A")
// some long running work
print("task A")
// some long running work
print("task A")
...
}
Run Code Online (Sandbox Code Playgroud)
可以在任何情况下调度任务中断发送它的任务吗?换句话说,在打印所有"任务A"之前,是否会发生"任务B"的打印?
task A
task B
task A
task A
...
Run Code Online (Sandbox Code Playgroud)
或GCD将保证:
task A
task A
task A
...
task B
Run Code Online (Sandbox Code Playgroud)
如果将任务分派到调用dispatch_async的同一队列,它会有什么不同吗?
换句话说,在打印所有"任务A"之前,是否会发生"任务B"的打印?
绝对可能发生.如果要异步调度到(a)不同的队列; 或者(b)并发队列(以及全局队列是并发队列),您明确要求它们相互并发运行.
确切的序列A和B日志消息是各种任务的耗时,队列的优先级等等的函数.但是如果你想B在所有A任务之后才显示,那么你应该明确地控制它行为(通知发送组,串行队列,障碍等的块).
如果您告诉我们您想要保证的行为,我们可以告诉您如何做到这一点.
| 归档时间: |
|
| 查看次数: |
434 次 |
| 最近记录: |