private async Task <bool> DispatchProjection(ProjectionDescriptor projection, MessageEnvelope envelope, ProjectingContext context) { while (true) { try { await TryDispatch(projection, envelope, context).NotOnCapturedContext(); return(true); } catch (ProjectingException ex) { ProjectingError(ex); if (context.ExceptionSolution == ExceptionSolutions.Ignore) { return(true); } if (context.ExceptionSolution == ExceptionSolutions.Drop) { projection.Drop(); return(false); } if (!context.CanRetry()) { projection.Drop(); throw; } context.NextRetry(); } } }