2017-01-19 1 views
1

私の簡単な理解:非エスケープクロージャー関数を非同期でディスパッチできますか?エスケープと非エスケープ閉鎖との間の差の

  • エスケープクロージャ関数が戻った後に呼び出されます。私が知る限り、これはコールバックがで処理される方法に似ています - 関数は即座に戻り、非同期に実行され、関数内で長時間実行された結果はクロージャ/完了ブロック/コールバックと呼ばれる。
  • 非エスケープクロージャは同期実行されているように見えます。この場合、長時間実行される操作が完了するまで関数自体は戻りません。

は(私は右のことを得たか)

スウィフト3の@escapingSE-0103中)にスウィフト2の@noescapeから移動するための変更ログと正当性を読んで、あなたが非同期派遣を非エスケープすることができます表示されます閉鎖する。

これは本当ですか?可能?

非エスケープクロージャー関数を非同期でディスパッチできますか?もしそうなら、どうですか?

ボーナスポイントは - 私は本当に理解したい両方エスケープと非エスケープクロージャが存在する理由:

  • 非同期非エスケープ閉鎖をディスパッチするための実用的なユースケースがあります逃げる栓の代わりに?
  • デザインプロポーザルでは、非エスケープ(読み込み:同期?)による機能プログラミングの利点がデフォルトであることが示唆されています。これは本当ですか?どうして?
  • に非エスケープクロージャと約束の類似点はありますか?
  • 私がこのすべてについて間違っている場合は、@escapingの代わりに@asyncと呼んでみませんか?
+0

非同期に実行するには、クロージャを関数の外側のどこかに格納する必要があります(関数の前に実行が終了する保証はありません)。したがって、それは逃げました。したがって、 "*非同期にエスケープしないクロージャー関数をディスパッチする*"というのは矛盾です。何を読んだことがありましたか? – Hamish

+0

確かに、それは私にも矛盾のように聞こえる。これは私が別の開発者と持っていた別の会話から来たものです。 @escapingを使って混乱させる代わりに@asyncと呼ぶのはなぜですか?彼は、エスケープしていないクロージャを非同期でディスパッチできると答えた。 ¯\\ _(ツ)_ /¯ – brandonscript

答えて

関連する問題