diff --git a/CHANGELOG.md b/CHANGELOG.md index b7b1625..84ad714 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `Observable.ofSeq (items)` and `Observable.ofSeq (items, cancellationToken)`, reachable after `open FSharp.Control.R3` - `Observable.chunkByBoundaries` accepting window boundaries of any element type - `rxqueryWith cancellationToken` and `RxQueryBuilder (cancellationToken)` to cancel the query operators that return a task -- XML documentation for every public API +- XML documentation for every public API, including the R3 1.3.1 limitations of `bind`, `catch` and `mapAsync` ### Changed diff --git a/src/FSharp.Control.R3/AsyncObservable.fs b/src/FSharp.Control.R3/AsyncObservable.fs index d187fb6..851eb4c 100644 --- a/src/FSharp.Control.R3/AsyncObservable.fs +++ b/src/FSharp.Control.R3/AsyncObservable.fs @@ -129,7 +129,21 @@ module Observable = /// when the source fails, with when the next element arrives, /// or, with , when the source completes. /// An exception raised by the computation is reported through - /// and the sequence continues. + /// and the sequence continues, with these exceptions in R3 1.3.1: + /// + /// + /// an exception that happens after the source completed is dropped, and the sequence completes successfully without it; + /// + /// an is never reported: it drops the element with + /// , + /// and , and stops the sequence without completing it + /// with the other configurations; + /// + /// with a limited , every exception permanently takes up one of the slots. + /// + /// + /// + /// is not affected by these limitations. /// /// /// Thrown when the concurrency limit of the options is 0 or below -1. diff --git a/src/FSharp.Control.R3/Observable.fs b/src/FSharp.Control.R3/Observable.fs index f26dbab..e985a54 100644 --- a/src/FSharp.Control.R3/Observable.fs +++ b/src/FSharp.Control.R3/Observable.fs @@ -17,6 +17,10 @@ let inline asObservable source : Observable<'Source> = ObservableExtensions.AsOb /// The result completes when the source and every inner sequence have completed. It fails when the source fails, /// or when an inner sequence fails while the source is still running. /// +/// +/// R3 1.3.1 ignores the failure of an inner sequence that fails after the source completed: the result then completes successfully +/// with the remaining inner sequences, or never completes when the failed one was the last one running. +/// /// let inline bind ([] f : 'T -> Observable<'TNext>) source = ObservableExtensions.SelectMany (source, f) @@ -41,6 +45,10 @@ let inline cast<'T, 'CastType> (source) = ObservableExtensions.Cast<'T, 'CastTyp /// pass through without reaching the handler. /// A handler whose argument type is not annotated handles every exception. /// +/// +/// In R3 1.3.1, disposing the result after it switched to the sequence of the handler does not unsubscribe from that sequence: +/// it stays subscribed until it completes by itself, while its elements are no longer delivered. +/// /// let inline catch ([] f : 'Exn -> Observable<'T>) o = ObservableExtensions.Catch (o, f) diff --git a/src/FSharp.Control.R3/TaskObservable.fs b/src/FSharp.Control.R3/TaskObservable.fs index dd608ac..7b347f9 100644 --- a/src/FSharp.Control.R3/TaskObservable.fs +++ b/src/FSharp.Control.R3/TaskObservable.fs @@ -65,7 +65,21 @@ module Observable = /// when the source fails, with when the next element arrives, /// or, with , when the source completes. /// An exception of the function is reported through - /// and the sequence continues. + /// and the sequence continues, with these exceptions in R3 1.3.1: + /// + /// + /// an exception that happens after the source completed is dropped, and the sequence completes successfully without it; + /// + /// an is never reported: it drops the element with + /// , + /// and , and stops the sequence without completing it + /// with the other configurations; + /// + /// with a limited , every exception permanently takes up one of the slots. + /// + /// + /// + /// is not affected by these limitations. /// /// /// Thrown when the concurrency limit of the options is 0 or below -1.