From 798d30bbd968dfa0e917b3936348ea3e6cdaa92c Mon Sep 17 00:00:00 2001 From: John Estropia Date: Sun, 13 Jun 2021 14:36:22 +0900 Subject: [PATCH] allow ListPublisher and ObjectPublisher combine Publishers to cancel subscription from any thread --- Sources/ListPublisher.SnapshotPublisher.swift | 13 ++++++++++++- Sources/ObjectPublisher.SnapshotPublisher.swift | 13 ++++++++++++- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/Sources/ListPublisher.SnapshotPublisher.swift b/Sources/ListPublisher.SnapshotPublisher.swift index 0b04190..e78d43f 100644 --- a/Sources/ListPublisher.SnapshotPublisher.swift +++ b/Sources/ListPublisher.SnapshotPublisher.swift @@ -135,8 +135,19 @@ extension ListPublisher { func cancel() { - self.publisher.removeObserver(self) self.subscriber = nil + + if Thread.isMainThread { + + self.publisher.removeObserver(self) + } + else { + + DispatchQueue.main.async { + + self.publisher.removeObserver(self) + } + } } diff --git a/Sources/ObjectPublisher.SnapshotPublisher.swift b/Sources/ObjectPublisher.SnapshotPublisher.swift index 00a9a44..35052fa 100644 --- a/Sources/ObjectPublisher.SnapshotPublisher.swift +++ b/Sources/ObjectPublisher.SnapshotPublisher.swift @@ -135,8 +135,19 @@ extension ObjectPublisher { func cancel() { - self.publisher.removeObserver(self) self.subscriber = nil + + if Thread.isMainThread { + + self.publisher.removeObserver(self) + } + else { + + DispatchQueue.main.async { + + self.publisher.removeObserver(self) + } + } }