【问题标题】:Dispatch group crashing because asynchronous function executes multiple time由于异步函数多次执行,调度组崩溃
【发布时间】:2016-08-28 04:26:12
【问题描述】:

我正在尝试使用调度组来等待两个异步进程完成。然而,第二个异步函数循环到我数据库中的消息量。

下面的代码崩溃是因为第二个异步函数多次执行,导致dispatch离开的次数多于dispatch进入的次数,导致dispatch的数量不均衡。在这种情况下是否有不同的方法来实现调度组。

dispatch_group_enter(dispatch_group)
ref.observeEventType(.ChildAdded, withBlock: {(snapshot) in
//execute once
dispatch_group_leave(self.dispatch_group)
}

dispatch_group_enter(dispatch_group)
ref.observeEventType(.ChildAdded, withBlock: {(snapshot) in
//execute 1000 times
dispatch_group_leave(self.dispatch_group)
}

dispatch_group_notify(self.dispatch_group, dispatch_get_main_queue()) {
print("done")
}

【问题讨论】:

  • 那么整个第二个块被执行了多次?

标签: ios swift firebase firebase-realtime-database grand-central-dispatch


【解决方案1】:

自从有人问这个问题以来已经有一段时间了,但这里有一个可能的解决方案。它崩溃了,因为您进入该组一次,但将其留在了大约 1000 次:

dispatch_group_enter(dispatch_group)
ref.observeEventType(.ChildAdded, withBlock: {(snapshot) in
//execute 1000 times
dispatch_group_leave(self.dispatch_group)
}

您必须确保,您离开群组的频率与您进入群组的频率相同。

【讨论】:

  • 这不是答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-23
  • 2017-07-18
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多