[解決済み] タスクが終了するまで待機する
2022-08-03 04:18:55
質問
DispatchQueueのタスクが終了するまで、私のコードを待たせることはできますか?CompletionHandlerか何かが必要なのでしょうか?
func myFunction() {
var a: Int?
DispatchQueue.main.async {
var b: Int = 3
a = b
}
// wait until the task finishes, then print
print(a) // - this will contain nil, of course, because it
// will execute before the code above
}
Xcode 8.2を使用し、Swift 3で記述しています。
どのように解決するのですか?
使用方法
DispatchGroup
を使って実現します。通知を受けるには、グループの
enter()
と
leave()
の呼び出しがバランスされます。
func myFunction() {
var a: Int?
let group = DispatchGroup()
group.enter()
DispatchQueue.main.async {
a = 1
group.leave()
}
// does not wait. But the code in notify() gets run
// after enter() and leave() calls are balanced
group.notify(queue: .main) {
print(a)
}
}
または待つことができます。
func myFunction() {
var a: Int?
let group = DispatchGroup()
group.enter()
// avoid deadlocks by not using .main queue here
DispatchQueue.global(attributes: .qosDefault).async {
a = 1
group.leave()
}
// wait ...
group.wait()
print(a) // you could also `return a` here
}
注意
:
group.wait()
は現在のキュー(あなたの場合、おそらくメインキュー)をブロックするので
dispatch.async
がブロックされるのを防ぐために、(上記のサンプルコードのように) 別のキューで
デッドロック
.
関連
-
[解決済み】Android "ビュー階層を作成した元のスレッドだけが、そのビューに触れることができる"
-
[解決済み] 他のスレッドからGUIを更新するにはどうすればよいですか?
-
Swift の Optional 値 && Optional のアンラップ時に予期せず nil が検出された場合の説明
-
[解決済み] プロセスとスレッドの違いは何ですか?
-
[解決済み] 非同期Task<T>メソッドを同期的に実行するにはどうしたらいいですか?
-
[解決済み] async/await - タスクとvoidをいつ返すか?
-
[解決済み] AngularJS 。非同期データでサービスを初期化する
-
[解決済み] 非同期ネットワークリクエストのswift forループの実行が終了するまで待つ
-
[解決済み] Swiftで1つのビューコントローラの向きを縦向きのみに固定する方法
-
[解決済み] Swiftダブルからストリング
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Swift の Optional 値 && Optional のアンラップ時に予期せず nil が検出された場合の説明
-
[解決済み] Swiftで1つのビューコントローラの向きを縦向きのみに固定する方法
-
[解決済み] Swiftダブルからストリング
-
[解決済み] Protocol ... can only be used as generic constraint because it has Self or associated type requirements "とは、どういう意味ですか?
-
[解決済み] swiftで改行なしの印刷をする
-
[解決済み] SwiftUI。TextFieldをファーストレスポンダーにするには?
-
[解決済み] ""内の二重引用符を印刷するには?
-
[解決済み] Swiftで範囲を作成する方法は?
-
[解決済み] Swift: PREPROCESSORフラグ(`#if DEBUG`など)を使ってAPIキーを実装する方法とは?
-
[解決済み] Swift - 複数条件でオブジェクトの配列を並べ替える