Ensure the consumer cache gets flushed of cancelled and faulted tasks #421
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.
Description
Currently, the
_consumerCache
within theConsumerFactory
has badIBasicConsumer
's removed and swapped out for new ones. This mechanism uses theTask.IsCompleted
method (https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task.iscompleted?view=net-6.0), which catches cancelled and faulted tasks as well. However, if the task is faulted/cancelled, then callingTask.Result
on such a task will result in the error (orTaskCanceledException
) to be thrown.Because of this, if the task in the cache becomes cancelled or faulted for whatever reason (I experienced this myself with a cancelled task, though have no idea where it came from) then the error will remain in the cache and be thrown whenever the consumer for that key is retreived again
This PR is a simple change to the logic to treat faulted and cancelled tasks separately to successfully completed tasks.