      Immediately after that `.Complete` is emitted.
      */
     public func writeValue(_ data: Data, for descriptor: Descriptor) -> Observable<Descriptor> {
-        return .create { observer in
-            let disposable = self.ensureValidPeripheralState(for: self.monitorWrite(for: descriptor).take(1))
-                .subscribe(observer)
-            self.peripheral.writeValue(data, for: descriptor.descriptor)
-            return disposable
-        }
+        let monitorWrite = self.monitorWrite(for: descriptor).take(1)
+        return ensureValidStateAndCallIfNecessary(
+            for: monitorWrite,
+            call: { self.peripheral.writeValue(data, for: descriptor.descriptor) }
+        )
+    }
+
+    func ensureValidStateAndCallIfNecessary<T>(
+        for observable: Observable<T>,
+        call: @escaping () -> Void
+        ) -> Observable<T> {
+        let operation = Observable<T>.deferred {
+            call()
+            return .empty()
+        }
+        return ensureValidPeripheralState(for: Observable.merge([observable, operation]))
     }
 
     /**

                }
                return characteristic
            }
    }

    /*!

                }
                return descriptor
            }
        return ensureValidPeripheralState(for: observable)
    }

    /**
