> For the complete documentation index, see [llms.txt](https://3440217568.gitbook.io/rxswift/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://3440217568.gitbook.io/rxswift/decision_tree/observeon.md).

# observeOn

**指定 `Observable` 在那个 `Scheduler` 发出通知**

![](https://4217506537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWj545abP2yK86-qksJ%2Fsync%2F8bad15371733570a380f13cba99fd8c0483e2a70.png?generation=1616819388634714\&alt=media)

**ReactiveX** 使用 [Scheduler](/rxswift/rxswift_core/schedulers.md) 来让 `Observable` 支持多线程。你可以使用 **observeOn** 操作符，来指示 `Observable` 在哪个 [Scheduler](/rxswift/rxswift_core/schedulers.md) 发出通知。

![](https://4217506537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWj545abP2yK86-qksJ%2Fsync%2F8cde32baec13a7a1f758933447f739234d3b992d.png?generation=1616819388831719\&alt=media)

注意⚠️：一旦产生了 `onError` 事件， **observeOn** 操作符将立即转发。他不会等待 `onError` 之前的事件全部被收到。这意味着 `onError` 事件可能会跳过一些元素提前发送出去，如上图所示。

![](https://4217506537-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MWj545abP2yK86-qksJ%2Fsync%2Fc33348c29e9efb0fc123c5ece106749927d73379.png?generation=1616819389064819\&alt=media)

[subscribeOn](/rxswift/decision_tree/subscribeon.md) 操作符非常相似。它指示 `Observable` 在哪个 [Scheduler](/rxswift/rxswift_core/schedulers.md) 发出执行。

默认情况下，`Observable` 创建，应用操作符以及发出通知都会在 `Subscribe` 方法调用的 [Scheduler](/rxswift/rxswift_core/schedulers.md) 执行。[subscribeOn](/rxswift/decision_tree/subscribeon.md) 操作符将改变这种行为，它会指定一个不同的 [Scheduler](/rxswift/rxswift_core/schedulers.md) 来让 `Observable` **执行，observeOn** 操作符将指定一个不同的 [Scheduler](/rxswift/rxswift_core/schedulers.md) 来让 `Observable` 通知观察者。

如上图所示，[subscribeOn](/rxswift/decision_tree/subscribeon.md) 操作符指定 `Observable` 在那个 [Scheduler](/rxswift/rxswift_core/schedulers.md) 开始执行，无论它处于链的那个位置。 另一方面 **observeOn** 将决定后面的方法在哪个 [Scheduler](/rxswift/rxswift_core/schedulers.md) 运行。因此，你可能会多次调用 **observeOn** 来决定某些操作符在哪个线程运行。
