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