我有一个线程,它执行静态方法GetTasksToHandle,其中包含互斥,每次只有一个应用程序可以得到一个任务。然而,互斥总是返回true。
请帮帮我,我做错什么了?
public static class BLStaticTask
{
private static Mutex TasksMut = new Mutex();
public static List<Tasks> GetTasksToHandle()
{
try
{
if (TasksMut.WaitOne())
{
using (DBContext db = new DBContext ())
{
return db.prGetTasksToHandle().ToList();
}
}
else
{
return null;
}
}
catch
{
return null;
}
finally
{
try
{
TasksMut.ReleaseMutex();
}
catch
{
}
}
}
}我什么都试过了,什么都没用。Mutex.waitone总是正确的
发布于 2022-10-30 21:20:32
那是故意的。让我们看看文献资料
如果当前实例接收到信号,则返回
true。如果从未发出当前实例的信号,则WaitOne()永远不会返回。
它永远不会返回false,它只会阻塞直到它可用。
如果您想要等待一定的时间,可以尝试需要超时的WaitOne重载:
if (TasksMut.WaitOne(1000)) // wait up to 1000 milliseconds
{
// mutex held
}
else
{
// mutex couldn't be taken before timeout
}如果超时时间在互斥对象空闲之前过去,则返回false。
https://stackoverflow.com/questions/74256674
复制相似问题