asyncInstance
гарантирует асинхронную доставку событий, тогда как instance
может доставлять события синхронно, если он уже находится в главном потоке.
Что касается того, почему вам когда-либо потребуется принудительно выполнять асинхронную доставку, когда вы уже находитесь в главном потоке: это довольно редко, и я обычно стараюсь избегать этого, но иногда у вас есть рекурсивный реактивный конвейер, где одно событиезапускает доставку нового события в том же конвейере. Если это происходит синхронно, это нарушает контракт Rx, и RxSwift выдаст предупреждение о том, что вы пытались доставить второе событие до его завершения. В этом случае вы можете наблюдать на MainScheduler.asyncInstance
, чтобы разорвать цикл.