4
我想在IObservable<T>
上訂閱並取消訂閱(dipose)收到T
類型的第一個元素之後的訂閱權限,即我只想在獲得的第一個元素後調用操作訂閱。訂閱並立即取消訂閱第一個動作
這是我想出了辦法:
public static class Extensions
{
public static void SubscribeOnce<T>(this IObservable<T> observable, Action<T> action)
{
IDisposable subscription = null;
subscription = observable.Subscribe(t =>
{
action(t);
subscription.Dispose();
});
}
}
用法示例:
public class Program
{
public static void Main()
{
var subject = new Subject<int>();
subject.OnNext(0);
subject.OnNext(1);
subject.SubscribeOnce(i => Console.WriteLine(i));
subject.OnNext(2);
subject.OnNext(3);
Console.ReadLine();
}
}
它將按預期只打印2
。 這個或其他方面有什麼不對嗎?有沒有一種更清潔的方式來使用RX開箱即用的擴展方法?
哇......不知道爲什麼我忘記了「Take」! (和'Skip'等等)感謝您的迴應! –