【发布时间】:2014-12-09 00:33:23
【问题描述】:
我有一个小任务 - 我必须创建互斥锁,使用任务和异步\等待,不阻塞当前线程(UI 线程)。
互斥接口:
Lock() - 返回一个任务,只有当互斥锁变得空闲时才会完成。这个任务必须 每个锁唯一,以禁止每个 Release() 调用超过 1 个解除阻塞。 Release() – 释放互斥锁。 Lock() 返回的一项且唯一一项任务必须完成。 该互斥体必须以这种方式工作
await mutex.Lock();
// critical code
mutex.Release();
我写了一段代码(见最后的链接),但如果简单描述问题是: 我创建了一个类互斥锁。 在方法 Lock 我做这样的事情:
await Task.Factory.StartNew(() =>
{
mutex.WaitOne();
UserDispatcher = Dispatcher.CurrentDispatcher;
});
在 Release 方法中,我做了类似的事情:
if (mutex != null && UserDispatcher != null)
{
UserDispatcher.Invoke(new Action(() =>
{
Console.WriteLine("Releasing");
mutex.ReleaseMutex();
}));
}
当我尝试释放互斥锁时,我的程序会永远冻结。什么问题?
完整代码:https://www.dropbox.com/s/4a370cn1bd2o0nz/MainWindow.xaml.cs?dl=0
项目链接:https://www.dropbox.com/sh/qsgle79jdgpr7cd/AAA3MZ6VlTNbUj-isgaQaLE-a?dl=0
【问题讨论】:
标签: c# wpf multithreading asynchronous async-await