Код: Выделить всё
public class TimeoutAttribute : ActionFilterAttribute
{
private readonly int _timeoutInMilliseconds;
private readonly TimeSpan _timeout;
public TimeoutAttribute(int timeoutInMilliseconds)
{
_timeoutInMilliseconds = timeoutInMilliseconds;
_timeout = TimeSpan.FromSeconds(timeoutInMilliseconds);
}
public override async Task OnActionExecutingAsync(HttpActionContext actionContext, CancellationToken cancellationToken)
{
using (var cts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken))
{
cts.CancelAfter(_timeout);
try
{
await base.OnActionExecutingAsync(actionContext, cts.Token);
}
catch (OperationCanceledException)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.RequestTimeout, ApiErrorMessages.RequestTimeout);
}
catch (Exception ex)
{
throw ex;
}
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... is-wrong-w