【发布时间】:2014-04-18 11:25:52
【问题描述】:
因此我不能在async 中使用线程仿射锁 - 在运行多个进程时如何保护我的资源?
例如,我有两个使用以下任务的进程:
public async Task<bool> MutexWithAsync()
{
using (Mutex myMutex = new Mutex(false, "My mutex Name"))
{
try
{
myMutex.WaitOne();
await DoSomething();
return true;
}
catch { return false; }
finally { myMutex.ReleaseMutex(); }
}
}
如果受 Mutex 保护的方法是同步的,那么上面的代码将有效,但使用 async 我会得到:
对象同步方法是从未同步的代码块中调用的。
那么命名互斥锁对异步代码没用吗?
【问题讨论】:
-
@Romasz:有可能采用不同的架构吗?我正在考虑一个代表其他进程执行请求的专用资源所有者进程。
-
@Noseratio 谢谢你的链接,它帮助我理解了一些东西,破坏了我的信号量想法;)
-
@StephenCleary 这可能是一个解决方案,但目前我正在研究 WP,它执行后台任务的可能性有限。也许我可以为此目的伪造代理人,但我想避免这种情况。谢谢你的帮助,你的一句话让我有了另一个想法。不过我会尝试更多地了解 Mutex 和 async。
标签: c# multithreading asynchronous async-await