0
在我的应用程序中,我正在使用线程。所以我有一个叫pull的函数,它在一个单独的线程中运行。由于C#中的定时器而线程排队#
var timerCall = Observable.Timer(TimeSpan.Zero, TimeSpan.FromSeconds(1));
_subscription = timerCall.Subscribe(async res =>
{
List<dynamic> result = pull();
if (result != null && result.Count > 0)
await Connection.Broadcast(new
{
id = _newestId,
events = result
});
});
我每秒钟都会调用线程。我使用的锁存在,以及在我的拉动作用这样
lock (_locker){
// do stuff
}
让我们假设的功能拉取每次呼叫的平均为1.2秒,这意味着,在最后我最终会具有较大的队列。我不需要那个。任何方式来预防它?
所以我应该做一些像Moniter.TryEnter(){}而不是锁(_locker)? – mohsinali1317
是的,如果它获得锁定,它将返回true。做那里的代码如果块。所以如果另一个线程已经在使用这个锁,它将跳过它,所以你不会得到一个巨大的队列 – kevintjuh93
另外,我会在线程本身中使用它,或者如果你在pull方法中使用它,则返回null。 – kevintjuh93