コード例 #1
0
        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();
                }
            }
        }