                     self.central.cache.peripherals[Peripheral(peripheralObject)] = peripheralObject
                 }
             }
+        }
+    }
+    
+    @objc(GATTAsyncCentralManagerDelegate)
+    class Delegate: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate {
+        
+        private(set) weak var central: DarwinCentral!
+        
+        fileprivate init(_ central: DarwinCentral) {
+            super.init()
+            self.central = central
+        }
+        
+        fileprivate func log(_ function: String = #function, _ arguments: String?...) {
+            let message = arguments
+                .lazy
+                .compactMap { $0 }
+                .reduce(into: function) { $0 += " " + $1 }
+            self.central.log(message)
+        }
+        
+        // MARK: - CBCentralManagerDelegate
+        
+        func centralManagerDidUpdateState(_ centralManager: CBCentralManager) {
+            assert(self.central != nil)
+            assert(self.central?.centralManager === centralManager)
+            let state = unsafeBitCast(centralManager.state, to: DarwinBluetoothState.self)
+            log(state.description)
+            self.central.continuation.state.yield(state)
         }
         
         func centralManager(

@available(macOS 10.5, iOS 13.0, watchOS 6.0, tvOS 13.0, *)
internal extension DarwinCentral {
    
    @objc(GATTAsyncCentralManagerDelegate)
    final class Delegate: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate {
        
        private(set) weak var central: DarwinCentral!
        
        fileprivate init(_ central: DarwinCentral) {
            super.init()
            self.central = central
        }
        
        private func log(_ function: String = #function, _ arguments: String?...) {
            let message = arguments
                .lazy
                .compactMap { $0 }
                .reduce(into: function) { $0 += " " + $1 }
            self.central.log(message)
        }
        
        // MARK: - CBCentralManagerDelegate
        
        func centralManagerDidUpdateState(_ centralManager: CBCentralManager) {
            assert(self.central != nil)
            assert(self.central?.centralManager === centralManager)
            let state = unsafeBitCast(centralManager.state, to: DarwinBluetoothState.self)
            log(state.description)
            self.central.continuation.state.yield(state)
        }
        
        func centralManager(_ centralManager: CBCentralManager, willRestoreState state: [String : Any]) {
            assert(self.central != nil)
            assert(self.central?.centralManager === centralManager)

         A string (an instance of NSString) containing a unique identifier (UID) for the peripheral manager that is being instantiated.
         The system uses this UID to identify a specific peripheral manager. As a result, the UID must remain the same for subsequent executions of the app in order for the peripheral manager to be successfully restored.
         */
        public let restoreIdentifier: String?
        
        /**
         Initialize options.
         */
        public init(showPowerAlert: Bool = false,
                    restoreIdentifier: String? = nil) {
            
            self.showPowerAlert = showPowerAlert
            self.restoreIdentifier = restoreIdentifier
