/* Page prose (ja) */
"WrappingUp" = "# まとめ\n\n作業を `Operation` オブジェクトに包むことは、クロージャの手軽さを、再利用と制御と引き換えにします。それはオブジェクトが必要なときにだけ見合う取引です。ここでの混乱のほとんどはタイミングに関するものです。作業が実際にいつ実行されるのか、そしてその結果がいつ準備できるのか、です。下のライフサイクルのポイントを整理しておけば、operation は予測しやすいままになります。\n\n* **`Operation`** はオブジェクトとして包まれた作業なので、名前、状態、入力、出力を運べ、あとでキャンセルと依存関係もサポートできます。\n* **`BlockOperation`** は手早い選択肢です。`.start()` はそれを**現在のスレッド上で同期的に**実行するので、それだけでは並行処理は得られません。作業をメインスレッドの外へ移すには、キューに追加しましょう。\n* **`OperationQueue`** は operation をバックグラウンドスレッドで実行します。デフォルトでは複数を一度に実行するので、完了の順序は予測できません。**`maxConcurrentOperationCount = 1`** だけが、それをシリアルかつ順序どおりにします。\n* 入力と出力をプロパティとして保持する再利用可能な作業のためには、**`Operation` をサブクラス化**し、**`main()`** をオーバーライドしましょう。同期的に保てば、`main()` が戻ったときに終了します。`main()` を自分で呼んではいけません。`start()` を呼ぶか、キューに追加します。それが operation の状態を管理してくれます。\n* Operation は**使い捨て**です（各インスタンスは一度だけ開始し、再実行するには新しいものを作ります）。そして出力は作業が終わった*あと*にだけ読み取り、`addOperation` の直後には決して読み取りません。\n* 単純な投げっぱなしのクロージャには GCD を選び、作業を管理できるオブジェクトとして必要なときには Operation を選びましょう。\n\n---\n\n## 次は\n\n次の章では [operation の依存関係とキャンセル](Operation%20Dependencies%20and%20Cancellation.playgroundchapter/Overview) を扱います。「印刷の*あと*に製本する」とどう言うか、すでにキューに入った作業をどうキャンセルするか、そして作業が `main()` より長く生きる operation をどう書くか、です。\n\n[前へ](@previous)  |  9 / 9 ページ";
