コンテンツにスキップ

ライブフィード

ソース: sample/shared/…/examples/livefeed/

ライブフィードサンプルは、デバウンス・長時間ポーリング・ファイアアンドフォーゲット分析・指数バックオフリトライという4つの非同期タスクパターンを1つのマシンで示します。


ステート

Idle     — クエリなし;ユーザーの入力待ち
Active   — 検索結果表示中;オプションでライブ更新をストリーミング
Failed   — 最後の検索が失敗;リトライ UI 表示中

4つのタスクパターン

パターン 1 — デバウンス(キー付き、キーストロークごとに置換)

すべての QueryChanged アクションが task("search") を起動します。キーが同じなので、各キーストロークが前の実行中タスクをキャンセルしてから新しいものを開始します。

パターン 2 — 長時間ポーリングループ(キー付き、明示的な開始/停止)

GoLive は無期限に実行されるポーリングコルーチンを開始します。PauseLive は明示的に停止します。ステート型は変化しないため autoCancel は使えません。明示的な cancel("poll") が必要です。

パターン 3 — ファイアアンドフォーゲット分析(キーなし、マシンライフタイム)

キーなしの task { } を使用します。キーなしタスクはレジストリに保存されず、ステート変化に関係なく完了まで実行されます。

パターン 4 — 指数バックオフリトライ(キー付き、前の試行を置換)

Failed ステートでリトライアクションを提供します。各リトライはバックオフ遅延を2倍にし(最大30秒)、task("search") により以前の試行からの遅延レスポンスが破棄されます。


親キャッチオールによる Clear

Clear はどのステートからも有効です。state<FeedState> ブロックに登録し、遷移前に実行中のジョブを停止します:

state<FeedState> {
    on<FeedAction.Clear> {
        cancel("search")
        cancel("poll")
        transition(FeedState.Idle)
    }
}