現在、以下のような関係にある、myFunc1() と myFunc2() があります。
swift
1func myFunc1() { 2 let dispatchQueueA = DispatchQueue(label: "QueueA") 3 4 print("1. Current Thread: (Thread.current)") 5 dispatchQueueA.async { 6 print("2. Current Thread: (Thread.current)") 7 8 myFunc2(completion: { 9 print("3. Current Thread: (Thread.current)") 10 print("Completed!!!") 11 }) 12 } 13} 14 15func myFunc2(completion: @escaping () -> Void) { 16 let dispatchQueueB = DispatchQueue(label: "QueueB") 17 18 dispatchQueueB.async { 19 print("4. Current Thread: (Thread.current)") 20 21 // この処理は元のThread(myFunc2()が呼ばれたThread)に戻して処理したい 22 completion() 23 } 24}
myFunc1()をMainThreadから呼び出したところ、
- Current Thread: <NSThread: 0x600002db5440>{number = 1, name = main}
- Current Thread: <NSThread: 0x600002dade40>{number = 3, name = (null)}
- Current Thread: <NSThread: 0x600002daddc0>{number = 4, name = (null)}
- Current Thread: <NSThread: 0x600002daddc0>{number = 4, name = (null)}
Completed!!!
このようなログを得ました。
上記コメントにも書いた通り、myFunc2は呼び出された後に、自分で独自のThreadを作成し、その中で処理をした後、completion()というクロージャを呼び出しています。
このcompletion()を呼び出す際には、元のThread、つまり、myFunc2を呼び出したThreadに戻してから処理をしたいのですが、どのようにすれば良いでしょうか?
MainThreadから必ずmyFunc2が呼び出されるのであれば、
swift
1DispatchQueue.main.async
を使ってやればいいのですが、myFunc2がどのスレッドから呼び出されるかは必ずしも固定はされていません。
どのようにしてやれば、myFunc2の呼び出し元のスレッドに戻すことができるでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/11 04:16
2019/04/11 07:05 編集
2019/04/15 05:36