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);
        }
示例#2
0
 private DisposableAlpacaDataSubscription(
     IAlpacaDataSubscription <TItem> subscription,
     IStreamingDataClient client)
 {
     _subscription = subscription;
     _client       = client;
 }
示例#3
0
        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);