Allow cancellation to propagate
This commit is contained in:
Родитель
4259b65c16
Коммит
8fb6c2a50a
|
@ -77,7 +77,9 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks
|
|||
|
||||
Log.HealthCheckEnd(_logger, registration, entry, stopwatch.GetElapsedTime());
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
// Allow cancellation to propagate.
|
||||
catch (Exception ex) when (ex as OperationCanceledException == null)
|
||||
{
|
||||
entry = new HealthReportEntry(HealthStatus.Failed, ex.Message, ex, data: null);
|
||||
Log.HealthCheckError(_logger, registration, ex, stopwatch.GetElapsedTime());
|
||||
|
|
|
@ -188,6 +188,35 @@ namespace Microsoft.Extensions.Diagnostics.HealthChecks
|
|||
});
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CheckHealthAsync_Cancellation_CanPropagate()
|
||||
{
|
||||
// Arrange
|
||||
var insideCheck = new TaskCompletionSource<object>();
|
||||
|
||||
var service = CreateHealthChecksService(b =>
|
||||
{
|
||||
b.AddAsyncCheck("cancels", async ct =>
|
||||
{
|
||||
insideCheck.SetResult(null);
|
||||
|
||||
await Task.Delay(10000, ct);
|
||||
return HealthCheckResult.Failed();
|
||||
});
|
||||
});
|
||||
|
||||
var cancel = new CancellationTokenSource();
|
||||
var task = service.CheckHealthAsync(cancel.Token);
|
||||
|
||||
// After this returns we know the check has started
|
||||
await insideCheck.Task;
|
||||
|
||||
cancel.Cancel();
|
||||
|
||||
// Act & Assert
|
||||
await Assert.ThrowsAsync<TaskCanceledException>(async () => await task);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task CheckHealthAsync_ConvertsExceptionInHealthCheckToFailedResultAsync()
|
||||
{
|
||||
|
|
Загрузка…
Ссылка в новой задаче