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); })); }
protected virtual async ValueTask <IAsyncDisposable> ScheduleAsyncCore(Func <CancellationToken, ValueTask> action) { var cad = new CancellationAsyncDisposable(); await ScheduleAsyncCore(action, cad.Token).ConfigureAwait(false); return(cad); }