     - parameter onErrorRecover: Calculates driver that continues to drive the sequence in case of error.
     - returns: Driving observable sequence.
     */
+    #if swift(>=3.2)
+    public func asSharedSequence<S>(sharingStrategy: S.Type = S.self, onErrorRecover: @escaping (_ error: Swift.Error) -> SharedSequence<S, E>) -> SharedSequence<S, E> {
+        let source = self
+            .asObservable()
+            .observeOn(S.scheduler)
+            .catchError { error in
+                onErrorRecover(error).asObservable()
+        }
+        return SharedSequence(source)
+    }
+    #else
     public func asSharedSequence<S: SharingStrategyProtocol>(sharingStrategy: S.Type = S.self, onErrorRecover: @escaping (_ error: Swift.Error) -> SharedSequence<S, E>) -> SharedSequence<S, E> {
         let source = self
             .asObservable()

    - parameter onErrorDriveWith: SharedSequence that provides elements of the sequence in case of error.
    - returns: Driving observable sequence.
    */
    public func asSharedSequence<S: SharingStrategyProtocol>(sharingStrategy: S.Type = S.self, onErrorDriveWith: SharedSequence<S, E>) -> SharedSequence<S, E> {
        let source = self
            .asObservable()

            }
        return SharedSequence(source)
    }
    #endif

    /**
    Converts anything convertible to `Observable` to `SharedSequence` unit.
