質問編集履歴
3
Scan+Concatで無限には続かった
title
CHANGED
File without changes
|
body
CHANGED
@@ -52,36 +52,38 @@
|
|
52
52
|
#### Scan+Concatの場合
|
53
53
|
|
54
54
|
変換メソッドを`Scan+Concat`で呼んだ場合、変換メソッド`ConvertAsync`の順番は保たれますが、
|
55
|
-
変換部分
|
55
|
+
変換部分がすぐ停止しません。出力部分だけがすぐ停止されます。
|
56
56
|
|
57
|
-
以下では停止処理`disposerA.Dispose()`
|
57
|
+
以下では5個目完了ぐらいのタイミングで停止処理`disposerA.Dispose()`しても、12個目まで変換は続きます。
|
58
|
+
大体止めた個数の倍ぐらいまで変換が続くようです。20個目で停止→40個目ぐらいまで変換される。
|
58
59
|
|
59
60
|
出力結果
|
60
61
|
```
|
61
|
-
00.
|
62
|
+
00.065|Thread:1|Start Subscription
|
62
|
-
00.
|
63
|
+
00.613|Thread:4|Start ConvertAsync 0
|
63
|
-
00.
|
64
|
+
00.745|Thread:4|End ConvertAsync 0
|
64
|
-
00.
|
65
|
+
00.751|Thread:5|Subscrive inputValue:[Converted:0 delayMilliSec:100]
|
65
|
-
01.
|
66
|
+
01.121|Thread:5|Start ConvertAsync 1
|
66
|
-
01.
|
67
|
+
01.233|Thread:5|End ConvertAsync 1
|
67
|
-
01.
|
68
|
+
01.233|Thread:5|Subscrive inputValue:[Converted:1 delayMilliSec:100]
|
68
|
-
01.
|
69
|
+
01.614|Thread:6|Start ConvertAsync 2
|
69
|
-
01.
|
70
|
+
01.725|Thread:4|End ConvertAsync 2
|
70
|
-
01.
|
71
|
+
01.725|Thread:4|Subscrive inputValue:[Converted:2 delayMilliSec:100]
|
71
|
-
02.
|
72
|
+
02.112|Thread:4|Start ConvertAsync 3
|
72
|
-
03.
|
73
|
+
03.978|Thread:6|End ConvertAsync 3
|
73
|
-
03.
|
74
|
+
03.979|Thread:6|Start ConvertAsync 4
|
74
|
-
03.
|
75
|
+
03.979|Thread:5|Subscrive inputValue:[Converted:3 delayMilliSec:1858]
|
75
|
-
|
76
|
+
05.823|Thread:7|End ConvertAsync 4
|
76
|
-
|
77
|
+
05.823|Thread:7|Start ConvertAsync 5
|
77
|
-
|
78
|
+
05.823|Thread:6|Subscrive inputValue:[Converted:4 delayMilliSec:1836]
|
78
79
|
|
79
|
-
06.
|
80
|
+
06.920|Thread:1|Dispose Subscription
|
80
|
-
|
81
|
+
07.223|Thread:4|End ConvertAsync 5
|
81
|
-
|
82
|
+
07.223|Thread:4|Start ConvertAsync 6
|
82
|
-
|
83
|
+
08.545|Thread:6|End ConvertAsync 6
|
84
|
+
(略)
|
83
|
-
|
85
|
+
15.244|Thread:4|Start ConvertAsync 12
|
84
|
-
.
|
86
|
+
16.961|Thread:6|End ConvertAsync 12
|
85
87
|
```
|
86
88
|
|
87
89
|
### 該当のソースコード
|
2
誤字
title
CHANGED
File without changes
|
body
CHANGED
@@ -11,7 +11,7 @@
|
|
11
11
|
### 発生している問題・エラーメッセージ
|
12
12
|
#### SelectManyの場合
|
13
13
|
|
14
|
-
変換メソッドを`SelectMany`で
|
14
|
+
変換メソッドを`SelectMany`で呼んだ場合、変換メソッド`ConvertAsync`の順番が前後してしまいます。
|
15
15
|
ただし、変換→出力部分の停止はできています。
|
16
16
|
|
17
17
|
以下では0~3個目までは問題ないですが、3個目の開始`Start ConvertAsync 3`の後に、3個目の完了`End ConvertAsync 3`前に4個目が開始`Start ConvertAsync 4`してしまいます。
|
@@ -51,7 +51,7 @@
|
|
51
51
|
|
52
52
|
#### Scan+Concatの場合
|
53
53
|
|
54
|
-
変換メソッドを`Scan+Concat`で
|
54
|
+
変換メソッドを`Scan+Concat`で呼んだ場合、変換メソッド`ConvertAsync`の順番は保たれますが、
|
55
55
|
変換部分の停止はできません。出力部分だけ停止されます。
|
56
56
|
|
57
57
|
以下では停止処理`disposerA.Dispose()`後も無限に変換は続きます。
|
1
補足
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
Reactive Extensionsでasyncメソッドを順番に実行したい
|
1
|
+
[C#]Reactive Extensionsでasyncメソッドを順番に実行したい
|
body
CHANGED
@@ -6,6 +6,7 @@
|
|
6
6
|
ここではサンプルとして、1秒毎に値を発行する`Observable.Interval`を入力、文字列への変換をするメソッド`ConvertAsync`を変換、時刻などを付加してコンソールへプリントするメソッド`WriteLineDebug`を出力としています。
|
7
7
|
|
8
8
|
変換メソッド`ConvertAsync`は内部で`await Task.Delay`をしていますが、実際に使用する場合はここがファイルやネットワークアクセスになります。
|
9
|
+
この`ConvertAsync`の開始・終了が前後しないように順番に行いたいです。
|
9
10
|
|
10
11
|
### 発生している問題・エラーメッセージ
|
11
12
|
#### SelectManyの場合
|
@@ -53,7 +54,7 @@
|
|
53
54
|
変換メソッドを`Scan+Concat`で読んだ場合、変換メソッド`ConvertAsync`の順番は保たれますが、
|
54
55
|
変換部分の停止はできません。出力部分だけ停止されます。
|
55
56
|
|
56
|
-
停止処理`disposerA.Dispose()`後も無限に変換は続きます。
|
57
|
+
以下では停止処理`disposerA.Dispose()`後も無限に変換は続きます。
|
57
58
|
|
58
59
|
出力結果
|
59
60
|
```
|
@@ -151,6 +152,7 @@
|
|
151
152
|
[Reactive Extensions再入門](https://blog.okazuki.jp/entry/20120324/1330956809)
|
152
153
|
|
153
154
|
### 補足情報(FW/ツールのバージョンなど)
|
154
|
-
|
155
|
+
C# 8.0
|
155
156
|
.NET 5.0
|
156
|
-
"System.Reactive" Version="5.0.0"
|
157
|
+
"System.Reactive" Version="5.0.0"
|
158
|
+
VisualStudio 2019
|