teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

誤解を防ぐ

2019/12/24 08:24

投稿

nkrmn_a
nkrmn_a

スコア27

title CHANGED
@@ -1,1 +1,1 @@
1
- 非同期で繰り返し行っているAPI通信を、繰り返している途中でも中断させたい
1
+ 非同期で繰り返し行っているAPI通信を、繰り返している途中でもキャンセルさせたい
body CHANGED
@@ -42,5 +42,6 @@
42
42
  forEachをbreakで抜けようかと思いましたが、出来ないことを知り断念。
43
43
  forEachをfor-inで書き直し、フラグで管理しながらif文でbreak記述もしましたが、なぜかbreakしてくれず。
44
44
 
45
- 本当は非同期を止めるか、メソッドの処理を中断などさせたいのですが、ググっても分からず。
45
+ 本当は非同期の通信を止めるか、メソッドの処理を中断などさせたいのですが、ググっても分からず。
46
+ 処理のキャンセルはどうやるのが良いのでしょうか。
46
47
  よろしくお願いします。

2

不足

2019/12/24 08:24

投稿

nkrmn_a
nkrmn_a

スコア27

title CHANGED
File without changes
body CHANGED
@@ -30,11 +30,17 @@
30
30
  dispatchQueue.async(group: dispatchGroup) {
31
31
  Thread.sleep(forTimeInterval: Double.random(in: 1..<2))
32
32
  // API通信開始
33
- self.getAPIResult(code:code)
33
+ self.getAPIResult(item:value, code:code)
34
34
  dispatchGroup.leave()
35
35
  }
36
36
  }
37
37
  }
38
38
  ```
39
39
 
40
- ### 試したこと
40
+ ### 試したこと
41
+
42
+ forEachをbreakで抜けようかと思いましたが、出来ないことを知り断念。
43
+ forEachをfor-inで書き直し、フラグで管理しながらif文でbreak記述もしましたが、なぜかbreakしてくれず。
44
+
45
+ 本当は非同期を止めるか、メソッドの処理を中断などさせたいのですが、ググっても分からず。
46
+ よろしくお願いします。

1

うまく反映されなかった

2019/12/24 04:46

投稿

nkrmn_a
nkrmn_a

スコア27

title CHANGED
File without changes
body CHANGED
@@ -11,25 +11,30 @@
11
11
  // セルタップしたとき
12
12
  func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
13
13
 
14
- //他店取得通信開始
14
+ //API通信
15
- let queue = DispatchQueue.global(qos: .default)
15
+ let queue = DispatchQueue.global(qos: .default)
16
- queue.async {
16
+ queue.async {
17
- self.doMultiAsyncProcess(sku_cd: self.tapItemcd)
17
+ self.doMultiAsyncProcess(code: tapCode)
18
- DispatchQueue.main.async {
19
- ///通信完了後
20
- if Global.MyStoreFlg == false {
21
- // ツールバー設定 自店舗に戻るボタンの色を戻す
22
- self.back.tintColor = .none
23
- }
18
+ }
24
- }
19
+ }
20
+
21
+ // 非同期でAPI通信を行う
22
+ func doMultiAsyncProcess(code: String) {
23
+
24
+ let dispatchGroup = DispatchGroup()
25
+ let dispatchQueue = DispatchQueue(label: "queue", attributes: .concurrent)
26
+
27
+ // 非同期処理を実行
28
+ list.forEach { (value) in
29
+ dispatchGroup.enter()
30
+ dispatchQueue.async(group: dispatchGroup) {
31
+ Thread.sleep(forTimeInterval: Double.random(in: 1..<2))
32
+ // API通信開始
33
+ self.getAPIResult(code:code)
34
+ dispatchGroup.leave()
25
- }
35
+ }
26
- }
36
+ }
37
+ }
27
38
  ```
28
39
 
29
- ### 試したこと
40
+ ### 試したこと
30
-
31
- ここに問題に対して試したことを記載してください。
32
-
33
- ### 補足情報(FW/ツールのバージョンなど)
34
-
35
- ここにより詳細な情報を記載してください。