Следующее НЕ БУДЕТ поймать испущенное значение:
someObservable = Observable.FromEventPattern(this, "MyEvent");
FireMyEvent("foo");
await someObservable.FirstOrDefaultAsync(e => e.Args == "foo");
Так что я сталкивался с этим шаблоном в своих модульных тестах:
var tsc = new TaskCompletionSource<bool>();
var callback = someObservable.FirstOrDefaultAsync(...);
using (callback.Subscribe(e => tsc.SetResult(e.Args)))
{
FireMyEvent("foo");
tsc.Task.Wait(1000);
}
Assert.AreEqual("foo", tsc.Task.Result);
В основном мне нужно подписаться, затем вызватьдействие, а затем ждать подписку наблюдаемой.
Можно ли упростить эту подписку / ожидание, не вводя новую задачу или WaitHandle?