首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mutex.WaitOne()始终为真

Mutex.WaitOne()始终为真
EN

Stack Overflow用户
提问于 2022-10-30 20:50:57
回答 1查看 45关注 0票数 -2

我有一个线程,它执行静态方法GetTasksToHandle,其中包含互斥,每次只有一个应用程序可以得到一个任务。然而,互斥总是返回true。

请帮帮我,我做错什么了?

代码语言:javascript
复制
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总是正确的

EN

回答 1

Stack Overflow用户

发布于 2022-10-30 21:20:32

那是故意的。让我们看看文献资料

如果当前实例接收到信号,则返回true。如果从未发出当前实例的信号,则WaitOne()永远不会返回。

它永远不会返回false,它只会阻塞直到它可用。

如果您想要等待一定的时间,可以尝试需要超时的WaitOne重载:

代码语言:javascript
复制
if (TasksMut.WaitOne(1000)) // wait up to 1000 milliseconds
{
    // mutex held
}
else
{
    // mutex couldn't be taken before timeout
}

如果超时时间在互斥对象空闲之前过去,则返回false

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74256674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档