Я только что написал код, а затем я узнал, что есть некоторые проблемы с monitor.wait, заставляя меня выполнять операцию внутри замков, я хотел бы сейчас, если это хороший способ сохранить поток ожидания, ....Монитор Ждите кеширования, ... это хорошая практика?
Я не уверен, что thread.join выполнит эту работу, так как в моем приложении много потоков, и каждая из них выполняет определенную работу, которую они могут завершить в течение времени ...
вот мой код:
public static class TaskManager
{
private static readonly object UpdateLock = new object();
private static readonly object WaitLock = new object();
private static readonly LiaisonDb _db = new LiaisonDb();
private static List<liaQueue> _liaQueueList = new List<liaQueue>();
private static DateTime _lastUpdate = new DateTime();
public static liaQueue GetTask(string sessionType)
{
liaQueue task;
lock (UpdateLock)
{
if (_lastUpdate < DateTime.Now.AddSeconds(-5))
{
Thread t = new Thread(UpdateCache) {IsBackground = true};
t.Start();
lock (WaitLock)
{
Monitor.Wait(WaitLock);
}
_lastUpdate = DateTime.Now;
}
task = _liaQueueList
.FirstOrDefault(w => w.Stat == 0
&& w.Type != null
|| string.Equals(w.Type, sessionType));
}
return task;
}
private static void UpdateCache()
{
try
{
_liaQueueList = _db.liaQueue.Where(w => w.Stat == 0).ToList();
}
finally
{
lock (WaitLock)
{
Monitor.Pulse(WaitLock);
}
}
}
}
Как вы видите, я положил два замка, и один из них только для monitor.wait, держать нить ждет ответа ...
я думаю, что я также должен возвращает нуль, а кэш становится обновилась? ...
Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См.: Как создать минимальный, полный и проверенный пример. 1 – TomTom
Если ваш код работает - у вас нет технической проблемы, но попросите просмотреть код. – TomTom
@TomTom мой код работает, но вопрос в том, будет ли это работать непрерывно? (мой первый раз с monitor.wait/palse), является способ, которым я реализую его хорошим способом? и что-то вроде этого. Я хочу знать, хорошо ли то, что я сделал, и если это не вызывает проблем, так как оно станет частью сложного приложения. && как запросить проверку кода? – deadManN