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秒,所以这意味着最终我将拥有一个大队列。我不需要那个。有什么方法可以预防吗?

c#中由于定时器导致线程排队

我能想到一件事。您可以使用Monitor类来检查是否获得了锁。因此,如果线程仍然繁忙,则可以跳过该线程,然后再等待一秒钟,直到另一个线程完成。