Тайм-аут запроса ASP.NET Core не срабатывает

Я не могу настроить автоматический запуск тайм-аута в предварительной версии ASP.NET Core 8.0.

https://learn.microsoft.com/en-us/aspnet/core/ Performance/timeouts?view=aspnetcore-8.0

      var builder = WebApplication.CreateBuilder(args);

builder.Services.AddRequestTimeouts();

var app = builder.Build();

app.UseRequestTimeouts();

app.MapGet("/", async (HttpContext context) =>
    {
        try
        {
            await Task.Delay(TimeSpan.FromSeconds(10), context.RequestAborted);
        }
        catch (TaskCanceledException)
        {
            return Results.Content("Timeout!", "text/plain");
        }

        return Results.Content("No timeout.", "text/plain");
    })
    .WithRequestTimeout(TimeSpan.FromSeconds(1));

app.Run();

Ожидаемый результат: запуск тайм-аута через 1 секунду.

Фактический результат: возвращает успех через 10 секунд.

2 ответа

Когда вы запускаете приложение с подключенным отладчиком, проверка тайм-аута запроса пропускается.

Microsoft.AspNetCore.Http.Timeouts.RequestTimeoutsMiddlewareэто добавлено сUseRequestTimeoutsсодержит следующий код:

      internal sealed class RequestTimeoutsMiddleware
{
    public Task Invoke(HttpContext context)
    {
        if (Debugger.IsAttached)
        {
            return _next(context);
        }
        ...
    }
}

https://github.com/dotnet/aspnetcore/blob/v8.0.0-preview.5.23302.2/src/Http/Http/src/Timeouts/RequestTimeoutsMiddleware.cs#L31

Я считаю, что использование «Начать без отладки» поможет.

Другие вопросы по тегам