2
私はFinallyメソッドを理解していません。このような状況では発火しません。なぜ観測できません。最後に呼び出されていますか?
[TestMethod]
public void FinallyHappensOnError()
{
bool finallyActionHappened = false;
try
{
Observable
.Throw<Unit>(new DivideByZeroException())
.Finally(() => finallyActionHappened = true)
.Subscribe();
}
catch
{
}
Assert.IsTrue(finallyActionHappened);
}
これは、「最後ではなく」を使用して動作します。私はなぜそれがDoで動作するのか分かりませんが、最後にはありません。
[TestMethod]
public void CanRecordWhenSequenceFinishes()
{
bool sequenceFinished = false;
try
{
Observable.Throw<Unit>(new DivideByZeroException())
.Do(
onError: ex => { sequenceFinished = true; },
onCompleted:() => sequenceFinished = true,
onNext: _ => { })
.Subscribe();
}
catch
{
}
Assert.IsTrue(sequenceFinished);
}
私は完全に理解していません。何と何の競争?最終的に起こる前にテストが終了していますか?私は遅延、スレッドスケジューラなどがないので、これはすべて同期的だと思った。 – JustinM
実際には、2番目のコードのAssertもヒットしていない。私はそれにブレークポイントを入れて、それは起こっていません。 – JustinM
ああ、私は混乱しています。私の元のテストコードは失敗します。しかし、私のテストの2行目が 'Subject obs = new Subject ();'であれば、それを 'Subscribe(obs)'に変更してテストをパスするだけでなく、テストは決してキャッチブロックに入ることはありません。私はそこにブレークポイントを置き、それはヒットしていません。 –
JustinM