有人可以帮我做一个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 <>'。它会返回序列中的最后一个项目。 –
你是对的。我会更新答案。 –