我刚写了一个代码,然后我发现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,让线程等待答案...
我想我还必须在缓存刷新时返回null?...