2 つSubject
の があります。1 つは ID を持つ人物オブジェクトのストリームで、もう 1 つは誰が誰と友達になったかを表す ID の xref のストリームです。ここにいくつかの単純化されたコードがあります。
class Program {
static void Main() {
// Set up observables
var people = new Subject<Person>();
var friendMap = new Subject<FriendMap>();
var friendNotices = from p1 in people
from p2 in people
from pair in friendMap
where p1.Id == pair.Id1 && p2.Id == pair.Id2
select p1.Name + " befriended " + p2.Name;
// Subscribe to log
friendNotices.Subscribe(Console.WriteLine);
// Add people
people.OnNext(new Person(1, "Alice"));
people.OnNext(new Person(2, "Bob"));
// Add relationships
friendMap.OnNext(new FriendMap(1, 2)); // => "Alice befriended Bob"
friendMap.OnNext(new FriendMap(2, 1)); // Doesn't show up!
}
}
class Person {
public Person(int id, string name) {
Id = id;
Name = name;
}
public string Name;
public int Id;
}
class FriendMap {
public FriendMap(int id1, int id2) {
Id1 = id1;
Id2 = id2;
}
public int Id1;
public int Id2;
}
私が抱えている問題は、xref を追加してもイベントが発生しない場合があることですfriendNotice
。特にId1の人物よりも先にId2の人物を作成すると失敗するようです。
これは Rx のバグですか、それとも私のコードのバグですか? いずれにせよ、これを機能させるにはどうすればよいですか?
(私のアプリケーションでは、「フレンドになる」ことは可換ではありません。アリスがボブとフレンドになることは、ボブがアリスとフレンドになることとは異なる関係であるため、「ID を交換して再試行するだけ」は、私の場合は使用可能なソリューションではありません)。