如何正确处理 CoreBluetooth 超时与 Task Cancellation
本文讲解 CoreBluetooth 回调转 async/await 时最易被忽略的超时与取消处理。核心要点:① 蓝牙回调不保证到达,每个操作必须配超时兜底,否则 await 永久挂死;② 用 withCheckedThrowingContinuation 转换后,还需套 withTaskCancellationHandler 响应取消;③ 结果、超时、取消三者竞态 resume,必须用锁+标志位互斥,保证只 resume 一次;④ 取消不能只让 await 抛错,还要真正释放底层资源(停止扫描、断开连接);⑤ 等蓝牙就绪本身也是超时场景,可用 TaskGroup 竞速实现;⑥ ArcBLEKit 将这套机制内建为默认行为,错误具体可区分。

















