4.x: Add ExceptionHelper & HalfSerializer lock-free tools #563
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds two lock-free helper class to work with partial signal serialization and atomic exception management.
HalfSerializer
This is an efficient, lock-free serialization when the
OnNextare still coming in sequentially but there could be a concurrentOnErrororOnCompletedhappening, for example, withTakeUntilorSkipUntil. These methods establish the correct sequential behavior.ExceptionHelper
Hosts a shared termination indication exception (similar to how
BooleanDisposable.Trueis used for indicating a disposedIDisposablefield).In addition, it offers methods for atomically setting one Exception, swapping in a the terminal exception and getting back the last exception and the ability to aggregate exceptions until a terminal exception is swapped in. This latter feature can come in handy with future
SelectManyandConcatoperators that want to delay errors from the inner sequences and keep processing them, then finally emitting all the exceptions gathered as anAggregateException.