Есть ли способ получить время, проведенное в очереди запросов в Kestrel/ASP.NET Core?

Я понимаю, что промежуточное программное обеспечение ASP.NET Core запускается, когда запрос готов к обработке. Но если приложение находится под нагрузкой, и ASP.NET Core не может обрабатывать все запросы по мере их поступления, они помещаются в "очередь" где-то? Я не знаю, является ли это некоторой управляемой очередью внутри Kestrel или связано ли это с libuv.

Я хотел бы знать, как долго данный запрос будет потрачен в этой очереди. Есть что-то в HttpContext, который может мне это сказать?

Заранее спасибо

Ответ 1

Этот вопрос не так прост.

Если вы хотите отслеживать все время, вам нужно сделать много шагов. В начале добавьте уникальную марку или тики к запросам, чтобы вы могли идентифицировать их по одному. Во-вторых, создайте обработчик, который перехватывает ваши запросы и регистрирует время. В-третьих, добавьте точку регистрации для каждого метода, связанного с запросами. В-четвертых, это будет сюрприз - вы не можете сделать ничего такого, чтобы уменьшить это время, ожидая конфигурации IIS в отношении потоков, параллельных запросов, обработки сеансов и т.д. В-пятых, если ваш браузер измеряет 2000 мс, ваш сервер измеряет 200 мс, это не ядро ​​.NET, а его код/​​архитектура/конфиг. Извините, что рассказываете плохие новости.

Используйте класс System.Diagnostics.Stopwatch для измерения времени.