[2] [[イベント・ループ]]における処理の単位を[DFN[[RUBYB[タスク]@en[task]]]]といいます。 * 仕様書 [REFS[ - [1] '''[CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-03-28 21:58:58 +09:00]] 版) ''' - [19] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2012-03-28 21:58:58 +09:00]] 版) ]REFS] * 分類 [3] [[タスク]]には次の種類があります [SRC[>>1]]。 - [5] [[イベント]]: 特定の [CODE(DOMi)@en[[[EventTarget]]]] において [CODE(DOMi)@en[[[Event]]]] を[[非同期]]的に [[dispatch]] します。 -- [6] なお、[[タスク]]として[[非同期]]的に実行される[[イベント]]だけでなく、 他の[[タスク]]の中で[[同期]]的に実行されるものもあります。 - [7] [[構文解析]]: [[構文解析器]]が[[バイト]]列を[[字句]]化して処理します。 - [8] [[コールバック]]: [[コールバック]]を[[非同期]]的に呼び出します。 - [9] [[資源]]の利用: [[fetch]] 操作において[[非同期]]的に [[fetch]] が行われる時、 [[資源]]が利用可能になった時にその処理を行います。 - [10] [[DOM]] 操作の反応: [[要素]]によっては [[DOM]] 操作によって引き起こされる処理があります。 * 追加 [11] [[利用者エージェント]]が[DFN[[RUBYB[[[タスクをキューに追加]]]@en[queue a task]]]]するという時は、 関係する[[イベント・ループ]]の[[タスク・キュー]]のいずれかに当該[[タスク]]を追加し[['''なければなりません''']]。 同じ[[タスク源]]からの[[タスク]]は常に同じ[[タスク・キュー]]に追加しなければ[['''なりません''']]。 違う[[タスク源]]からの[[タスク]]は別の[[タスク・キュー]]に追加して[['''構いません''']]。 [SRC[>>1]] [EG[ [12] 例えば、[[マウス]]や[[鍵盤]]の[[イベント]]のための[[タスク・キュー]] ([[利用者対話タスク源]]用[[タスク・キュー]]) とそれ以外用の[[タスク・キュー]]の2つを用意し、 [[マウス]]や[[鍵盤]]の方の[[タスク・キュー]]を優先的に処理することにすれば、 [[利用者]]の操作には反応を返すようにしつつ、それが無い時に他の処理を実行する、 というようにできます。 [SRC[>>1]] ]EG] [13] [[HTML]] 仕様で定義される[[タスク]]は、 [CODE(DOMi)@en[[[Document]]]] と関連付けられます。 [SRC[>>1]] - [14] [[タスク]]がある[[要素]]の文脈で[[タスク・キュー]]に追加されたなら、 その[[要素]]の [CODE(DOMi)@en[[[Document]]]] を使います。 [SRC[>>1]] - [15] [[タスク]]がある[[閲覧文脈]]の文脈で[[タスク・キュー]]に追加されたなら、 その時点での[[閲覧文脈]]の[[活性文書]]を使います。 [SRC[>>1]] - [16] [[タスク]]が[[スクリプト]]によって、あるいは[[スクリプト]]のために[[タスク・キュー]]に追加されたなら、 その[[スクリプトの文書]]を使います。 [SRC[>>1]] ;; [17] 「[[HTML]] 仕様で」と限定されているということは、他の仕様の[[タスク]]では関連付けられていないこともあるのでしょうか。 [20] [[closing]] [[フラグ]]が[[真]]に設定されている時は、 [[タスク]]が追加されようとしても捨てなければ[['''なりません''']]。 [SRC[>>19]] ;; [21] [[ワーカー]]が終了しようとしている時に発生した[[タイマー]]その他の[[タスク]]が捨てられることになります。 この[[フラグ]]は[[ワーカー]]にだけあり、本体の[[イベント・ループ]]では起こりません。 * 関連 [4] [[タスク・キュー]]は、[[タスク]]の[[順序付き]]の[[リスト]]です [SRC[>>1]]。 [[タスク]]は[[タスク・キュー]]に追加されることによって順に実行されていきます。 [18] [[Webブラウザー]]における[[非同期]]な処理は、すべてが[[タスク]]として説明されているわけではありません。 [[資源]]の [[fetch]] の後の[[非同期]]な処理などは、[[安定状態]]に処理を再開するものとされています。