在C#WCF Web服务中排队工作负载

时间:2013-08-21 20:47:39

标签: c# wcf webserver queue

我有一个处理某些输入的慢速函数。在该功能被大量调用的白天会有高峰时段。我不希望这在消费者方面引入滞后。因此,我希望函数将输入添加到队列然后返回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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您可以在ConcurrentQueue命名空间中使用System.Collections.Concurrent类。这是description on MSDN的链接。这样可以很容易地实现生产者 - 消费者队列模式。

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