有人可以幫我做一個IObserver的同步訂閱,這樣調用方法會阻塞,直到訂閱完成。 如:無效擴展同步訂閱
出版商
public static class Publisher {
public static IObservable<string> NonBlocking()
{
return Observable.Create<string>(
observable =>
{
Task.Run(() =>
{
observable.OnNext("a");
Thread.Sleep(1000);
observable.OnNext("b");
Thread.Sleep(1000);
observable.OnCompleted();
Thread.Sleep(1000);
});
return Disposable.Create(() => Console.WriteLine("Observer has unsubscribed"));
});
}
}
用戶
public static class Subscriber{
public static bool Subscribe()
{
Publisher.NonBlocking().Subscribe((s) =>
{
Debug.WriteLine(s);
},() =>
{
Debug.WriteLine("Complete");
});
// This will currently return true before the subscription is complete
// I want to block and not Return until the Subscriber is Complete
return true;
}
}
奇妙的是,不知道'.Do(..)'看起來像一個LastOrDefaultAsync()方法,所以我可以做一個.Wait()從那個 – Lukie
你可以直接'await'一個'的IObservable <>'。它會返回序列中的最後一個項目。 –
你是對的。我會更新答案。 –