Ejemplo n.º 1
0
        public Task <HealthStatus> AssertAvailable()
        {
            return(Task.Factory.StartNew(() => {
                var status =
                    TimeoutRunner.Run(_settings.TaskAvailabilityCheckTimeout, () => _task.AssertAvailable(),
                                      ex => {
                    _logger.Error(Subject, "Availability test failed for " + Subject, ex);
                    _logger.InfoMessage(() => new TaskAvailabilityFailed(Subject)
                    {
                        ExceptionText = ex.ToString(),
                        ExceptionType = ex.GetType().Name
                    });
                });

                switch (status)
                {
                case Completion.Exception:

                    return HealthStatus.Error;

                case Completion.Success:
                    return HealthStatus.Active;

                case Completion.Timedout:
                    _logger.InfoMessage(() => new TaskAvailabilityFailed(Subject)
                    {
                        ExceptionType = "Timedout"
                    });
                    return HealthStatus.Timedout;

                default:
                    throw new ArgumentOutOfRangeException("status", "Status " + status + " should not be possible here");
                }
            }, TaskCreationOptions.AttachedToParent));
        }