Короткий ответ - нет.
Как вы предполагаете, проблема в том, что ваш someCallbackToAPI
маршрутизирует к основному потоку, что не соответствует вашим ожиданиям, и вы ничего не можете сделать с этим переписыванием someCallbackToAPI. Если вы используете Alamofire или Moya, я думаю, у них есть альтернативные методы, которые не вызывают закрытие в главном потоке, но я не уверен. URLSession не переключается на основной поток, так что одной идеей было бы использовать его вместо этого.
Если вы хотите, чтобы saveCars
происходил в фоновом потоке, вам придется использовать наблюдаем в pu sh вычисление обратно в фоновый поток из main. subscribeOn
будет делать только вызов someCallbackToAPI(_:)
в фоновом потоке, он не может определить, для какого потока функция будет вызывать свое закрытие.
Так что-то вроде:
func syncCars() -> Completable {
return CarService().getCars()
.observeOn(someBackgroundScheduler)
.flatMapCompletable { cars in
// Now this will be on the background thread.
saveCars(cars)
}
}
В заключение, пустая подписка - это запах кода. Каждый раз, когда вы обнаруживаете, что сами звоните .subscribe()
для каких-либо целей, кроме тестирования, вы, вероятно, делаете что-то не так.