質問編集履歴

3

Scan+Concatで無限には続かった

2021/05/25 04:19

投稿

soi013
soi013

スコア149

test CHANGED
File without changes
test CHANGED
@@ -106,11 +106,13 @@
106
106
 
107
107
  変換メソッドを`Scan+Concat`で呼んだ場合、変換メソッド`ConvertAsync`の順番は保たれますが、
108
108
 
109
- 変換部分停止はできません。出力部分だけ停止されます。
109
+ 変換部分がすぐ停止ません。出力部分だけがすぐ停止されます。
110
-
111
-
112
-
110
+
111
+
112
+
113
- 以下では停止処理`disposerA.Dispose()`無限に変換は続きます。
113
+ 以下では5個目完了ぐらいのタイミングで停止処理`disposerA.Dispose()`して、12個目まで変換は続きます。
114
+
115
+ 大体止めた個数の倍ぐらいまで変換が続くようです。20個目で停止→40個目ぐらいまで変換される。
114
116
 
115
117
 
116
118
 
@@ -118,53 +120,55 @@
118
120
 
119
121
  ```
120
122
 
121
- 00.096|Thread:1|Start Subscription
123
+ 00.065|Thread:1|Start Subscription
122
-
124
+
123
- 00.649|Thread:5|Start ConvertAsync 0
125
+ 00.613|Thread:4|Start ConvertAsync 0
124
-
126
+
125
- 00.782|Thread:5|End ConvertAsync 0
127
+ 00.745|Thread:4|End ConvertAsync 0
126
-
128
+
127
- 00.787|Thread:4|Subscrive inputValue:[Converted:0 delayMilliSec:100]
129
+ 00.751|Thread:5|Subscrive inputValue:[Converted:0 delayMilliSec:100]
128
-
130
+
129
- 01.140|Thread:4|Start ConvertAsync 1
131
+ 01.121|Thread:5|Start ConvertAsync 1
130
-
132
+
131
- 01.250|Thread:4|End ConvertAsync 1
133
+ 01.233|Thread:5|End ConvertAsync 1
132
-
134
+
133
- 01.250|Thread:4|Subscrive inputValue:[Converted:1 delayMilliSec:100]
135
+ 01.233|Thread:5|Subscrive inputValue:[Converted:1 delayMilliSec:100]
134
-
136
+
135
- 01.635|Thread:4|Start ConvertAsync 2
137
+ 01.614|Thread:6|Start ConvertAsync 2
136
-
138
+
137
- 01.756|Thread:7|End ConvertAsync 2
139
+ 01.725|Thread:4|End ConvertAsync 2
138
-
140
+
139
- 01.756|Thread:5|Subscrive inputValue:[Converted:2 delayMilliSec:100]
141
+ 01.725|Thread:4|Subscrive inputValue:[Converted:2 delayMilliSec:100]
140
-
142
+
141
- 02.145|Thread:5|Start ConvertAsync 3
143
+ 02.112|Thread:4|Start ConvertAsync 3
142
-
144
+
143
- 03.690|Thread:6|End ConvertAsync 3
145
+ 03.978|Thread:6|End ConvertAsync 3
144
-
146
+
145
- 03.690|Thread:6|Start ConvertAsync 4
147
+ 03.979|Thread:6|Start ConvertAsync 4
146
-
148
+
147
- 03.690|Thread:4|Subscrive inputValue:[Converted:3 delayMilliSec:1530]
149
+ 03.979|Thread:5|Subscrive inputValue:[Converted:3 delayMilliSec:1858]
148
-
150
+
149
- 04.650|Thread:5|End ConvertAsync 4
151
+ 05.823|Thread:7|End ConvertAsync 4
150
-
152
+
151
- 04.650|Thread:5|Start ConvertAsync 5
153
+ 05.823|Thread:7|Start ConvertAsync 5
152
-
154
+
153
- 04.651|Thread:4|Subscrive inputValue:[Converted:4 delayMilliSec:956]
155
+ 05.823|Thread:6|Subscrive inputValue:[Converted:4 delayMilliSec:1836]
154
-
155
-
156
-
156
+
157
+
158
+
157
- 06.158|Thread:1|Dispose Subscription
159
+ 06.920|Thread:1|Dispose Subscription
158
-
160
+
159
- 06.296|Thread:4|End ConvertAsync 5
161
+ 07.223|Thread:4|End ConvertAsync 5
160
-
162
+
161
- 06.296|Thread:4|Start ConvertAsync 6
163
+ 07.223|Thread:4|Start ConvertAsync 6
162
-
164
+
163
- 07.997|Thread:6|End ConvertAsync 6
165
+ 08.545|Thread:6|End ConvertAsync 6
166
+
164
-
167
+ (略)
168
+
165
- 07.998|Thread:6|Start ConvertAsync 7
169
+ 15.244|Thread:4|Start ConvertAsync 12
166
-
170
+
167
- ...(終わらない)
171
+ 16.961|Thread:6|End ConvertAsync 12
168
172
 
169
173
  ```
170
174
 

2

誤字

2021/05/25 04:18

投稿

soi013
soi013

スコア149

test CHANGED
File without changes
test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
 
26
26
 
27
- 変換メソッドを`SelectMany`でんだ場合、変換メソッド`ConvertAsync`の順番が前後してしまっています。
27
+ 変換メソッドを`SelectMany`でんだ場合、変換メソッド`ConvertAsync`の順番が前後してしまいます。
28
28
 
29
29
  ただし、変換→出力部分の停止はできています。
30
30
 
@@ -104,7 +104,7 @@
104
104
 
105
105
 
106
106
 
107
- 変換メソッドを`Scan+Concat`でんだ場合、変換メソッド`ConvertAsync`の順番は保たれますが、
107
+ 変換メソッドを`Scan+Concat`でんだ場合、変換メソッド`ConvertAsync`の順番は保たれますが、
108
108
 
109
109
  変換部分の停止はできません。出力部分だけ停止されます。
110
110
 

1

補足

2021/05/25 04:08

投稿

soi013
soi013

スコア149

test CHANGED
@@ -1 +1 @@
1
- Reactive Extensionsでasyncメソッドを順番に実行したい
1
+ [C#]Reactive Extensionsでasyncメソッドを順番に実行したい
test CHANGED
@@ -14,6 +14,8 @@
14
14
 
15
15
  変換メソッド`ConvertAsync`は内部で`await Task.Delay`をしていますが、実際に使用する場合はここがファイルやネットワークアクセスになります。
16
16
 
17
+ この`ConvertAsync`の開始・終了が前後しないように順番に行いたいです。
18
+
17
19
 
18
20
 
19
21
  ### 発生している問題・エラーメッセージ
@@ -108,7 +110,7 @@
108
110
 
109
111
 
110
112
 
111
- 停止処理`disposerA.Dispose()`後も無限に変換は続きます。
113
+ 以下では停止処理`disposerA.Dispose()`後も無限に変換は続きます。
112
114
 
113
115
 
114
116
 
@@ -304,8 +306,10 @@
304
306
 
305
307
  ### 補足情報(FW/ツールのバージョンなど)
306
308
 
307
-
309
+ C# 8.0
308
310
 
309
311
  .NET 5.0
310
312
 
311
313
  "System.Reactive" Version="5.0.0"
314
+
315
+ VisualStudio 2019