2017-08-06 15 views
2

私はURLSession.dataTask(with:completionHandler:)の非同期の機能であり、Data(contentsOf:)の同期の機能であると見ました。これらの機能を実現するものは非同期またはですか?機能を迅速に同期化または同期化するにはどうすればよいですか?

+0

非同期メソッドは、通常、呼び出しが完了したときに呼び出し元に通知するメカニズムを提供します。彼らは一般的に "完了ハンドラ"クロージャパラメータを持っているか、そのクラスは "デリゲート"プロパティを持っています。したがって、これらのいずれかが表示されている場合は、赤いフラグであり、非同期である可能性があることを示します。これは難しくて速いルールではありません(たとえば、呼び出し元に完了を知らせるメカニズムを提供しない非同期メソッドを書くことができます)が、それはかなり貧弱なデザインであり、かなりまれです。間違いなく非同期ではないクロージャ/デリゲートパターンがあります。必ずドキュメントを介して確認してください。 – Rob

答えて

2

メソッド/メソッド呼び出しは常に同期します。しかし、いくつかのメソッドは、非同期の方法でを振る舞います。メソッドが完了しても、戻ってもまだ処理が行われています。

メソッドの定義には、それが何であるかどうかは何もありません。完了ハンドラがあるという事実ヒントこのメソッドはおそらく非同期な作業を行っているかもしれませんが、保証されていないし、完了ハンドラの不在もメソッドが非同期作業をしないことを保証していません。 メソッドが完了ハンドラを受け入れ、いくつかの非同期作業を行い、メソッドが返った後にcompletionHandlerが呼び出された場合、closureパラメータに@escapingがなければなりません。


ボトムライン:あなたはドキュメントを読んで、および/または、それが何をするかを理解するためにメソッドの実装を見ています。

+1

@ luk2302によると、同期や非同期の処理を行う独自のメソッドを制御するために、それらをDispatchQueueに置くことができます.Sisync {...}、.async {... }それぞれ。詳細については、GCDに関するAppleのドキュメントを参照してください。 https://developer.apple.com/library/content/documentation/General/Conceptual/ConcurrencyProgrammingGuide/OperationQueues/OperationQueues.html – Alienbash

関連する問題