正在对C#WCF web服务中的工作负载进行排队
本文关键字:负载 工作 排队 C#WCF web 服务 | 更新日期: 2023-09-27 18:28:36
我有一个处理一些输入的慢速函数。在一天中,当函数被大量调用时,会有高峰时间。我不希望这会给消费者带来滞后。因此,我希望函数将输入添加到队列中,然后返回true,而不是让这个函数完成它的工作然后返回true。然后我希望在后台处理队列,直到它为空。
你能告诉我用C#做这件事的最好方法吗?
以下是我开始使用的一些示例代码:
namespace WCFServiceWebRole1
{
public class Service1 : IService1
{
public bool SlowFunction(string input)
{
// Here is a slow function that processes input...
return true;
}
}
}
namespace WCFServiceWebRole1
{
public class Service1 : IService1
{
public bool SlowFunction(string input)
{
AddToQueue(input);
return true;
}
}
}
您可以在System.Collections.Concurrent
命名空间中使用ConcurrentQueue
类。这里有一个链接到MSDN上的描述。这将使实现生产者-消费者队列模式变得非常容易。
让SlowFunction
方法在类上调用Enqueue
,然后让System.Timers.Timer
对象定期运行一个执行TryDequeue
的方法。如果您有一些非常奇怪的用例,您也可以使用System.Threading.Timer
或一个调度任务来调用另一个服务。