正在对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;
        }
    }
}

正在对C#WCF web服务中的工作负载进行排队

您可以在System.Collections.Concurrent命名空间中使用ConcurrentQueue类。这里有一个链接到MSDN上的描述。这将使实现生产者-消费者队列模式变得非常容易。

SlowFunction方法在类上调用Enqueue,然后让System.Timers.Timer对象定期运行一个执行TryDequeue的方法。如果您有一些非常奇怪的用例,您也可以使用System.Threading.Timer或一个调度任务来调用另一个服务。