Почему запросы регулируются в моей реализации очереди задач? [закрыто]C#

Место общения программистов C#
Ответить
Anonymous
 Почему запросы регулируются в моей реализации очереди задач? [закрыто]

Сообщение Anonymous »

Я работаю над приложением на базе .NET, использующим System.Threading.Channel для управления выполнением задач для операций с базой данных с помощью драйвера Npgsql. Однако я столкнулся с проблемой, заключающейся в том, что текущая реализация ограничивает запросы, что приводит к снижению пропускной способности выполнения.
Вот как я ставлю задачи в очередь:

Код: Выделить всё

await TaskController.QueueTask(async () =>
{
cnt = await ReturnImpactedRecordsFromQuery(procedureName, databaseType, queryType, parameters);
});
Реализация TaskController:

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Threading.Channels;
using System.Threading.Tasks;

namespace Procedures
{
public static class TaskController
{
private static Channel channel = Channel.CreateBounded(new BoundedChannelOptions(Math.Max(1, Environment.ProcessorCount * 1000))
{
FullMode = BoundedChannelFullMode.Wait // Wait when the channel is full
});

static TaskController()
{
Task.Run(ProcessChannelAsync);
}

public static void QueueTask(Func task)
{
// Enqueue the work to the channel
channel.Writer.TryWrite(task);
}

private static async Task ProcessChannelAsync()
{
while (await channel.Reader.WaitToReadAsync())
{
while (channel.Reader.TryRead(out var workItem))
{
await workItem();
}
}
}
}
}
Запросы регулируются, а пропускная способность выполнения ниже ожидаемой. Как лучше всего изменить эту реализацию, чтобы увеличить пропускную способность и одновременно эффективно управлять выполнением задач?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ementation
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»