Реализовывал счетчик задач с очередью, но возникает timeout на последней пачке запросов, клиент ожидает и соединение разрывается. Скорее всего проблема в том, что очередь не до конца обрабатывается, как решить проблему?
try
{
if (listener.IsListening)
{
var context = listener.GetContext();
var limitTask = 500;
var limitRequest = 100;
if (queueContext.Count() > limitRequest)
{
context.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
context.Response.Close();
}
if (!queueContext.Any() && countTask < limitTask)
{
Task.Run(() =>
{
while (queueContext.TryDequeue(out context))
{
Interlocked.Increment(ref countTask);
var task = Task.Run(() => HandleContextAsync(context).ContinueWith(delegate { Interlocked.Decrement(ref countTask); }));
var timeOfProcessing = TimeSpan.FromMilliseconds(1000);
if (!task.Wait(timeOfProcessing))
{
context.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
context.Response.Close();
}
}
});
}
if (countTask < limitTask)
{
Interlocked.Increment(ref countTask);
var task = Task.Run(() => HandleContextAsync(context)).ContinueWith(delegate { Interlocked.Decrement(ref countTask); });
var timeOfProcessing = TimeSpan.FromMilliseconds(1000);
if (!task.Wait(timeOfProcessing))
{
context.Response.StatusCode = (int)HttpStatusCode.ServiceUnavailable;
context.Response.Close();
}
}
else
queueContext.Enqueue(context);
}
}
private async Task HandleContextAsync(HttpListenerContext listenerContext)
{
//обработка запроса
listenerContext.Response.StatusCode = (int)HttpStatusCode.OK;
listenerContext.Response.Close();
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У потока может быть контекст(GUI приложение), а может и не быть(Консольное приложение)
В чём разница между Invoke и обычным вызовом делегата через () в C#?
Как сравнить две картинки на разных сайтах? Интересует именно само сравнениеВся процедура по вытаскиванию картинок и обращение к сайтам...