Мне нужно промежуточное программное обеспечение для отмены запроса, если мой API занимает более х времени.Все мои вызовы API являются асинхронными и могут быть отменены:
public async Task<IActionResult> Get(CancellationToken token) { }
...
public async Task InvokeAsync(HttpContext context)
{
//....
int customDurationMilis = 1000; //1second
cancellTimer = new Timer(CancellRequestCallBack, context, customDurationMilis, Timeout.Infinite);
//...
await _next(context);
}
private void CancellRequestCallBack(HttpContext context)
{
//log...
//Aborts the connection underlying this request.
context.Abort();
}
представьте, что у меня есть метод действия API, занимающий 2 секунды, таймер вызовет CancellRequestCallBack, который выполняет прерывание соединения.Хорошая идея иметь Таймер?или должен пойти с другим подходом?Как вернуть пользовательский код ошибки вместо context.Abort () и отменить текущий вызов API?некоторые идеи будут очень признательны.спасибо
ОБНОВЛЕНИЕ, пытаясь сделать это с этим:
public async Task InvokeAsync(HttpContext context)
{
var task = _next(context);
if (await Task.WhenAny(task, Task.Delay(1000)) != task)
{
throw new MyCustomException("timeout!");
}
}
по крайней мере с этим я ловлю исключение в errorhandlermiddleware, возвращающем код состояния 500. Но я не получаю его в Почтальоне,Вместо этого я получаю сообщение «Не удалось получить ответ». Я предполагаю, что поток с запросом все еще будет работать.