// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT License. // See the LICENSE file in the project root for more information. using System.Reactive.Subjects; using System.Threading.Tasks; namespace System.Reactive.Linq { // REVIEW: Expose PublishLast using ConcurrentAsyncAsyncSubject underneath. partial class AsyncObservable { public static IConnectableAsyncObservable PublishLast(this IAsyncObservable source) { if (source == null) throw new ArgumentNullException(nameof(source)); return Multicast(source, new SequentialAsyncAsyncSubject()); } public static IAsyncObservable PublishLast(this IAsyncObservable source, Func, IAsyncObservable> selector) { if (source == null) throw new ArgumentNullException(nameof(source)); if (selector == null) throw new ArgumentNullException(nameof(selector)); return Multicast(source, () => new SequentialAsyncAsyncSubject(), selector); } public static IAsyncObservable PublishLast(this IAsyncObservable source, Func, Task>> selector) { if (source == null) throw new ArgumentNullException(nameof(source)); if (selector == null) throw new ArgumentNullException(nameof(selector)); return Multicast(source, () => Task.FromResult>(new SequentialAsyncAsyncSubject()), selector); } } }