我有一个处理某些输入的慢速函数。在该功能被大量调用的白天会有高峰时段。我不希望这在消费者方面引入滞后。因此,我希望函数将输入添加到队列然后返回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;
}
}
}
答案 0 :(得分:0)
您可以在ConcurrentQueue
命名空间中使用System.Collections.Concurrent
类。这是description on MSDN的链接。这样可以很容易地实现生产者 - 消费者队列模式。
让您的SlowFunction
方法在类上调用Enqueue
,然后让System.Timers.Timer
对象定期运行TryDequeue
的方法。如果您有一些非常奇怪的用例,您可以使用System.Threading.Timer
或计划任务点击另一个服务调用。