我正在尝试开发一个 Windows 服务来向订阅发送通知。数据保存在 SQL 服务器数据库中。
通知是通过向 REST API 端点发出 Web POST 请求来创建的,并保存在数据库表中。
该服务启动一个任务,该任务不断从该数据库表中读取通知并将它们添加到队列中。
该服务还启动了一些任务,这些任务不断从队列中读取并执行实际的发送过程。
代码运行良好并完成了所需的工作,但问题是运行服务时 CPU 使用率为 100%。
我尝试使用 Thread.Sleep 或 Task.Delay 但都没有帮助我减少 CPU 使用率。
我已在此 codeprojct页面中读到,我需要使用等待处理程序并且应该在某些条件下等待。我无法正常工作。
那么谁能建议我可以做些什么来减少EnqueueTask和的CPU使用率DequeueTask?
这是发件人代码:
static class NotificationSender
{
static ConcurrentQueue<NotificationDelivery> deliveryQueue = null;
static Task enqueueTask = null;
static Task[] dequeueTasks = null;
public static void StartSending(ServiceState serviceState)
{
PushService.InitServices();
enqueueTask = Task.Factory.StartNew(EnqueueTask, serviceState);
deliveryQueue = new ConcurrentQueue<NotificationDelivery>();
int dequeueTasksCount = 10;
dequeueTasks = new Task[dequeueTasksCount];
for (int i = 0; i < dequeueTasksCount; i++)
{
dequeueTasks[i] = Task.Factory.StartNew(DequeueTask, serviceState);
}
}
public static void EnqueueTask(object state)
{
ServiceState serviceState = (ServiceState)state;
using (DSTeckWebPushNotificationsContext db = new DSTeckWebPushNotificationsContext())
{
while (!serviceState.CancellationTokenSource.Token.IsCancellationRequested)
{
int toEnqueue = 100 - deliveryQueue.Count;
绝地无双
相关分类