c#中由于定时器导致线程排队
本文关键字:线程 排队 定时器 | 更新日期: 2023-09-27 18:12:29
在我的应用程序中,我使用线程。所以我有一个叫做pull的函数,它在一个单独的线程中运行。
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
}
让我们假设函数pull每次调用平均花费1.2秒,所以这意味着最终我将拥有一个大队列。我不需要那个。有什么方法可以预防吗?
我能想到一件事。您可以使用Monitor类来检查是否获得了锁。因此,如果线程仍然繁忙,则可以跳过该线程,然后再等待一秒钟,直到另一个线程完成。