public static async IAsyncEnumerable <TItem> AsAsyncEnumerable <TItem>( this IAlpacaDataSubscription <TItem> subscription, [EnumeratorCancellation] CancellationToken cancellationToken) { subscription.EnsureNotNull(nameof(subscription)); var buffer = Channel.CreateUnbounded <TItem>(); subscription.Received += HandleReceived; try { while (await buffer.Reader .WaitToReadAsync(cancellationToken) .ConfigureAwait(false)) { yield return(await buffer.Reader .ReadAsync(cancellationToken) .ConfigureAwait(false)); } } finally { subscription.Received -= HandleReceived; buffer.Writer.TryComplete(); } void HandleReceived(TItem item) => buffer.Writer.TryWrite(item); }
private DisposableAlpacaDataSubscription( IAlpacaDataSubscription <TItem> subscription, IStreamingDataClient client) { _subscription = subscription; _client = client; }
public static async ValueTask <IDisposableAlpacaDataSubscription <TItem> > CreateAsync( IAlpacaDataSubscription <TItem> subscription, IStreamingDataClient client) { await client.SubscribeAsync(subscription).ConfigureAwait(false); return(new DisposableAlpacaDataSubscription <TItem>(subscription, client)); }
public DisposableAlpacaDataSubscription( IAlpacaDataSubscription <TItem> subscription, IAlpacaDataStreamingClient client) { _subscription = subscription; _client = client; _client.Subscribe(_subscription); }
public static IAsyncEnumerable <TItem> AsAsyncEnumerable <TItem>( this IAlpacaDataSubscription <TItem> subscription) => AsAsyncEnumerable(subscription, CancellationToken.None);