我在一台计算机上运行了一个多实例应用程序。我想在C#中实现以下伪代码:
Mutex mutex = new Mutex(false, "SomeMutex");
while (true)
{
if (CheckIfCanDoSomething())
{
if (mutex.WaitOne(TimeSpan.Zero))
{
// I am the first instance that can do the task
DoSomething();
mutex.ReleaseMutex();
}
else
{
// Some other instance was first, wait until it has finished
mutex.WaitUntilUnlockedWithoutLockingIt();
DoSomethingElse();
}
}
}
基本上,我有一个应用程序的多个实例,即不断检查是否满足某些条件(CheckIfCanDoSomething
)来执行某些操作(DoSomething
)。问题是,当满足条件时,只有一个应用程序实例应该执行此任务。在CheckIfCanDoSomething
任务完成之前,true
方法将返回DoSomething
。
我怎样才能实现mutex.WaitUntilUnlockedWithoutLockingIt()
逻辑?
答案 0 :(得分:1)
嗯,你的伪代码显然有错误。实际上我会创建Mutext方法扩展,它将描述关键部分:
{{1}}
并像这样使用它:
{{1}}