【发布时间】:2014-08-07 19:13:24
【问题描述】:
我有一个计算密集型方法Calculate,它可能会运行几秒钟,请求来自多个线程。
只应执行一个Calculate,后续请求应排队等待初始请求完成。如果已经有一个请求排队,那么可以丢弃后续请求(因为排队的请求就足够了)
似乎有很多潜在的解决方案,但我只需要最简单的。
更新:这是我的初步尝试:
private int _queueStatus;
private readonly object _queueStatusSync = new Object();
public void Calculate()
{
lock(_queueStatusSync)
{
if(_queueStatus == 2) return;
_queueStatus++;
if(_queueStatus == 2) return;
}
for(;;)
{
CalculateImpl();
lock(_queueStatusSync)
if(--_queueStatus == 0) return;
}
}
private void CalculateImpl()
{
// long running process will take a few seconds...
}
【问题讨论】:
标签: c# .net multithreading asynchronous async-await