質問編集履歴

3

誤解を防ぐ

2019/12/24 08:24

投稿

nkrmn_a
nkrmn_a

スコア27

test CHANGED
@@ -1 +1 @@
1
- 非同期で繰り返し行っているAPI通信を、繰り返している途中でも中断させたい
1
+ 非同期で繰り返し行っているAPI通信を、繰り返している途中でもキャンセルさせたい
test CHANGED
@@ -86,6 +86,8 @@
86
86
 
87
87
 
88
88
 
89
- 本当は非同期を止めるか、メソッドの処理を中断などさせたいのですが、ググっても分からず。
89
+ 本当は非同期の通信を止めるか、メソッドの処理を中断などさせたいのですが、ググっても分からず。
90
+
91
+ 処理のキャンセルはどうやるのが良いのでしょうか。
90
92
 
91
93
  よろしくお願いします。

2

不足

2019/12/24 08:24

投稿

nkrmn_a
nkrmn_a

スコア27

test CHANGED
File without changes
test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
  // API通信開始
64
64
 
65
- self.getAPIResult(code:code)
65
+ self.getAPIResult(item:value, code:code)
66
66
 
67
67
  dispatchGroup.leave()
68
68
 
@@ -77,3 +77,15 @@
77
77
 
78
78
 
79
79
  ### 試したこと
80
+
81
+
82
+
83
+ forEachをbreakで抜けようかと思いましたが、出来ないことを知り断念。
84
+
85
+ forEachをfor-inで書き直し、フラグで管理しながらif文でbreak記述もしましたが、なぜかbreakしてくれず。
86
+
87
+
88
+
89
+ 本当は非同期を止めるか、メソッドの処理を中断などさせたいのですが、ググっても分からず。
90
+
91
+ よろしくお願いします。

1

うまく反映されなかった

2019/12/24 04:46

投稿

nkrmn_a
nkrmn_a

スコア27

test CHANGED
File without changes
test CHANGED
@@ -24,46 +24,56 @@
24
24
 
25
25
 
26
26
 
27
- //他店取得通信開始
27
+ //API通信
28
28
 
29
- let queue = DispatchQueue.global(qos: .default)
29
+ let queue = DispatchQueue.global(qos: .default)
30
30
 
31
- queue.async {
31
+ queue.async {
32
32
 
33
- self.doMultiAsyncProcess(sku_cd: self.tapItemcd)
33
+ self.doMultiAsyncProcess(code: tapCode)
34
34
 
35
- DispatchQueue.main.async {
35
+ }
36
36
 
37
- ///通信完了後
37
+ }
38
38
 
39
- if Global.MyStoreFlg == false {
40
39
 
41
- // ツールバー設定 自店舗に戻るボタンの色を戻す
42
40
 
43
- self.back.tintColor = .none
41
+ // 非同期でAPI通信を行う
44
42
 
45
- }
43
+ func doMultiAsyncProcess(code: String) {
46
44
 
47
- }
45
+
48
46
 
49
- }
47
+ let dispatchGroup = DispatchGroup()
50
48
 
49
+ let dispatchQueue = DispatchQueue(label: "queue", attributes: .concurrent)
50
+
51
+
52
+
53
+ // 非同期処理を実行
54
+
55
+ list.forEach { (value) in
56
+
57
+ dispatchGroup.enter()
58
+
59
+ dispatchQueue.async(group: dispatchGroup) {
60
+
61
+ Thread.sleep(forTimeInterval: Double.random(in: 1..<2))
62
+
63
+ // API通信開始
64
+
65
+ self.getAPIResult(code:code)
66
+
67
+ dispatchGroup.leave()
68
+
51
- }
69
+ }
70
+
71
+ }
72
+
73
+ }
52
74
 
53
75
  ```
54
76
 
55
77
 
56
78
 
57
79
  ### 試したこと
58
-
59
-
60
-
61
- ここに問題に対して試したことを記載してください。
62
-
63
-
64
-
65
- ### 補足情報(FW/ツールのバージョンなど)
66
-
67
-
68
-
69
- ここにより詳細な情報を記載してください。