Reactive Extensionsを使用して、PropertyChanged通知を抑制しようとしています。GroupByを使用してこれを行う例がありますが、PropertyNameごとに1つのサブスクリプションが作成されます。
すべてのプロパティのPropertyChangedイベントを処理したいので、PropertyNameごとにそれらのイベントを調整する必要があります。
これは私がこれまでに持っているものですが、デッドロックを引き起こします。
ValuesPropertyChanged = Observable.FromEventPattern<PropertyChangedEventArgs>(value, "PropertyChanged")
.GroupBy(o => o.EventArgs.PropertyName)
.First()
.Throttle(TimeSpan.FromSeconds(2))
.Subscribe(args => HandlePropertyChanged(args.EventArgs.PropertyName));
デッドロックは、.First()の呼び出しで発生します。
その行を次のように変更すると、ロックされたままになります。
.Select(o => o.First())
私も試しました
.Select(o => o.FirstAsync())
ここでのGroupByの例はかなり簡潔に見えますが、これらの例を自分のソリューションに変換することに頭を悩ませることはできません。
なぜこれがデッドロックを引き起こすのですか、そしてこれを機能させるにはどうすればよいですか?