Exemplo n.º 1
0
        public static IAsyncObservable <TSource> StartAsync <TSource>(Func <CancellationToken, Task <TSource> > functionAsync, IAsyncScheduler scheduler)
        {
            if (functionAsync == null)
            {
                throw new ArgumentNullException(nameof(functionAsync));
            }
            if (scheduler == null)
            {
                throw new ArgumentNullException(nameof(scheduler));
            }

            var cancel = new CancellationAsyncDisposable();

            var task = default(Task <TSource>);

            try
            {
                task = functionAsync(cancel.Token);
            }
            catch (Exception ex)
            {
                return(Throw <TSource>(ex));
            }

            return(Create <TSource>(async observer =>
            {
                var subscription = await task.ToAsyncObservable(scheduler).SubscribeAsync(observer).ConfigureAwait(false);

                return StableCompositeAsyncDisposable.Create(cancel, subscription);
            }));
        }
Exemplo n.º 2
0
        protected virtual async ValueTask <IAsyncDisposable> ScheduleAsyncCore(Func <CancellationToken, ValueTask> action)
        {
            var cad = new CancellationAsyncDisposable();

            await ScheduleAsyncCore(action, cad.Token).ConfigureAwait(false);

            return(cad);
        }