回答編集履歴

3

FullPath毎

2024/06/20 07:36

投稿

TN8001
TN8001

スコア10056

test CHANGED
@@ -88,7 +88,7 @@
88
88
  // 購読(つまりグループ毎に別々に購読してる)
89
89
  .Subscribe(e =>
90
90
  {
91
- // ここが目的のグループ毎のThrottle結果
91
+ // ここが目的のFullPath毎のThrottle結果
92
92
  Task.Run(() =>
93
93
  {
94
94
  string rtnCode = createBat(e.FullPath);

2

2024/06/20 07:34

投稿

TN8001
TN8001

スコア10056

test CHANGED
@@ -83,7 +83,7 @@
83
83
  // ここは新たなグループ(FullPath)があったときに来る(Changedイベント毎に来るのではない)
84
84
  Debug.WriteLine(g.Key);
85
85
 
86
- // グループごとにThrottle(1秒以上同じFullPathのイベントがこなければ最後のイベントを後続に流す)
86
+ // グループにThrottle(1秒以上同じFullPathのイベントがこなければ最後のイベントを後続に流す)
87
87
  g.Throttle(TimeSpan.FromSeconds(1))
88
88
  // 購読(つまりグループ毎に別々に購読してる)
89
89
  .Subscribe(e =>

1

追記

2024/06/20 06:47

投稿

TN8001
TN8001

スコア10056

test CHANGED
@@ -72,3 +72,27 @@
72
72
 
73
73
  `GroupByUntil`の例もありましたが、厳密には意味が違うような気がします(実用上は大差ないかもしれないが)
74
74
  [c# - Rx grouped throttling - Stack Overflow](https://stackoverflow.com/questions/42694010)
75
+
76
+ ## 追記
77
+ yajiyajiさんのコードに合わせるとすると、こうですかね?(動作確認はしてません^^;
78
+ ```cs
79
+ watcher.ChangedAsObservable()
80
+ .GroupBy(i => i.FullPath) // FullPathでグループ化
81
+ .Subscribe(g =>
82
+ {
83
+ // ここは新たなグループ(FullPath)があったときに来る(Changedイベント毎に来るのではない)
84
+ Debug.WriteLine(g.Key);
85
+
86
+ // グループごとにThrottle(1秒以上同じFullPathのイベントがこなければ最後のイベントを後続に流す)
87
+ g.Throttle(TimeSpan.FromSeconds(1))
88
+ // 購読(つまりグループ毎に別々に購読してる)
89
+ .Subscribe(e =>
90
+ {
91
+ // ここが目的のグループ毎のThrottle結果
92
+ Task.Run(() =>
93
+ {
94
+ string rtnCode = createBat(e.FullPath);
95
+ });
96
+ });
97
+ });
98
+ ```