Поскольку ваш SomeClass
не контролирует, когда эти функции будут вызываться или в каких потоках, ответ будет утвердительным, поэтому у вас есть проблемы с параллелизмом в этом коде из-за его пассивного характера.
очевидным решением здесь является отправка в очередь B внутри writeToResource()
, чтобы избежать состояния гонки.
Другой вариант - использовать NSLock
(или NSRecursiveLock
) и заблокировать его перед записью в ресурс и разблокировать его после.
Лучшая практика: когда у вас есть побочный эффект происходит внутри закрытия функции подписки (в данном случае запись в commonResource
, что закрытие - это только место, где возникает побочный эффект. Это будет означать отказ от пассивной функции writeToResource()
и вместо этого передать Observable, который был сгенерирован любым кодом, который в настоящее время вызывает функцию.