## Start
返回一個Observable,它發射一個類似于函數聲明的值

編程語言有很多種方法可以從運算結果中獲取值,它們的名字一般叫`functions, futures, actions, callables, runnables`等等。在`Start`目錄下的這組操作符可以讓它們表現得像Observable,因此它們可以在Observables調用鏈中與其它Observable搭配使用。
`Start`操作符的多種RxJava實現都屬于可選的`rxjava-async`模塊。
`rxjava-async`模塊包含`start`操作符,它接受一個函數作為參數,調用這個函數獲取一個值,然后返回一個會發射這個值給后續觀察者的Observable。
注意:這個函數只會被執行一次,即使多個觀察者訂閱這個返回的Observable。
### toAsync

`rxjava-async`模塊還包含這幾個操作符:`toAsync`, `asyncAction`, 和`asyncFunc`。它們接受一個函數或一個Action作為參數。
對于函數(functions),這個操作符調用這個函數獲取一個值,然后返回一個會發射這個值給后續觀察者的Observable(和`start`一樣)。對于動作(Action),過程類似,但是沒有返回值,在這種情況下,這個操作符在終止前會發射一個`null`值。
注意:這個函數或動作只會被執行一次,即使多個觀察者訂閱這個返回的Observable。
### startFuture

`rxjava-async`模塊還包含一個`startFuture`操作符,傳遞給它一個返回`Future`的函數,`startFuture`會立即調用這個函數獲取`Future`對象,然后調用`Future`的`get()`方法嘗試獲取它的值。它返回一個發射這個值給后續觀察者的Observable。
### deferFuture

`rxjava-async`模塊還包含一個`deferFuture`操作符,傳遞給它一個返回`Future`的函數(這個`Future`返回一個`Observable`),`deferFuture`返回一個Observable,但是不會調用你提供的函數,直到有觀察者訂閱它返回的Observable。這時,它立即調用`Future`的`get()`方法,然后鏡像發射`get()`方法返回的Observable發射的數據。
用這種方法,你可以在Observables調用鏈中包含一個返回Observable的`Future`對象。
### fromAction

`rxjava-async`模塊還包含一個`fromAction`操作符,它接受一個`Action`作為參數,返回一個Observable,一旦Action終止,它發射這個你傳遞給`fromAction`的數據。
### fromCallable

`rxjava-async`模塊還包含一個`fromCallable`操作符,它接受一個`Callable`作為參數,返回一個發射這個`Callable`的結果的Observable。
### fromRunnable

`rxjava-async`模塊還包含一個`fromRunnable`操作符,它接受一個`Runnable `作為參數,返回一個Observable,一旦Runnable終止,它發射這個你傳遞給`fromRunnable`的數據。
### forEachFuture

`rxjava-async`模塊還包含一個`forEachFuture`操作符。它其實不算`Start`操作符的一個變體,而是有一些自己的特點。你傳遞一些典型的觀察者方法(如onNext, onError和onCompleted)給它,Observable會以通常的方式調用它。但是`forEachFuture`自己返回一個`Future`并且在`get()`方法處阻塞,直到原始Observable執行完成,然后它返回,完成還是錯誤依賴于原始Observable是完成還是錯誤。
如果你想要一個函數阻塞直到Observable執行完成,可以使用這個操作符。
### runAsync
`rxjava-async`模塊還包含一個`runAsync`操作符。它很特殊,返回一個叫做`StoppableObservable `的特殊Observable。
傳遞一個`Action`和一個`Scheduler`給`runAsync`,它返回一個使用這個`Action`產生數據的`StoppableObservable`。這個`Action`接受一個`Observable`和一個`Subscription`作為參數,它使用`Subscription`檢查`unsubscribed`條件,一旦發現條件為真就立即停止發射數據。在任何時候你都可以使用`unsubscribe`方法手動停止一個`StoppableObservable`(這會同時取消訂閱與這個`StoppableObservable`關聯的`Subscription`)。
由于`runAsync`會立即調用`Action`并開始發射數據,在你創建StoppableObservable之后到你的觀察者準備好接受數據之前這段時間里,可能會有一部分數據會丟失。如果這不符合你的要求,可以使用`runAsync`的一個變體,它也接受一個`Subject`參數,傳遞一個`ReplaySubject`給它,你可以獲取其它丟失的數據了。
在RxJava中還有一個版本的`From`操作符可以將Future轉換為Observable,與`start`相似。
- ReactiveX
- Observables
- Single
- Subject
- Scheduler
- Operators
- 創建操作
- Create
- Defer
- Empty/Never/Throw
- From
- Interval
- Just
- Range
- Repeat
- Start
- Timer
- 變換操作
- Buffer
- FlatMap
- GroupBy
- Map
- Scan
- Window
- 過濾操作
- Debounce
- Distinct
- ElementAt
- Filter
- First
- IgnoreElements
- Last
- Sample
- Skip
- SkipLast
- Take
- TakeLast
- 結合操作
- And/Then/When
- CombineLatest
- Join
- Merge
- StartWith
- Switch
- Zip
- 錯誤處理
- Catch
- Retry
- 輔助操作
- Delay
- Do
- Materialize/Dematerialize
- ObserveOn
- Serialize
- Subscribe
- SubscribeOn
- TimeInterval
- Timeout
- Timestamp
- Using
- To
- 條件和布爾操作
- All/Contains/Amb
- DefaultIfEmpty
- SequenceEqual
- SkipUntil/SkipWhile
- TakeUntil/TakeWhile
- 算術和聚合操作
- Average/Concat/Reduce
- Max/Min/Count/Sum
- 異步操作
- 連接操作
- Connect
- Publish
- RefCount
- Replay
- 轉換操作
- 阻塞操作
- 字符串操作
- 按字母順序的操作符列表
- RxJava文檔和教程
- RxJava入門指南
- RxJava使用示例
- 實現自定義操作符
- 自定義插件
- Backpressure
- 錯誤處理
- Android模塊
- 參與開發
- 補充閱讀材料