             let corePeripheral = try accessQueue.sync { [unowned self] in
                 try self.connectedPeripheral(peripheral)
             }
+            
+            guard corePeripheral.state == .connected
+                else { throw CentralError.disconnected(peripheral) }
             
             let coreService = try corePeripheral.service(service)
             

            
            // attempt to connect (does not timeout)
            self.internalManager.connect(corePeripheral, options: options)
                        
            // throw async error
            do { try semaphore.wait() }
            

                try self.connectedPeripheral(peripheral)
            }
            
            guard corePeripheral.state == .connected
                else { throw CentralError.disconnected(peripheral) }
            
            let coreService = try corePeripheral.service(service)
            
            let coreCharacteristic = try coreService.characteristic(characteristic)
