【发布时间】:2016-12-05 22:50:33
【问题描述】:
我有一些使用 ReaderWriterLockSlim 的代码。当构造某个对象时,我会在其上获取写锁,并在稍后处理该对象时释放它。但是,由于这些调用来自哪里,我不能保证它们会在同一个线程上,这是 ReaderWriterLockSlim 的要求。
我相信一个合理的解决方案是在专用线程上运行对象的构造和处置,并让调用代码等待该任务完成(但保持线程处于活动状态)。看起来很乱,但如果不大规模重组我们的代码,我想不出另一种方法。
是否存在允许我在同一个线程上运行两个任务的现有 TaskScheduler 子类?
我当然愿意接受另一种这样做的范例。
【问题讨论】:
-
您使用的是 WPF 还是 Windows.Forms?还是 ASP.Net?这将极大地影响答案:)
-
有趣 - 包含 ReaderWriterLockSlim 的底层库被多个应用程序使用;一些在 Windows 窗体中,一些在 WPF 中;虽然有问题的情况是在我们的 WPF 应用程序中使用它时。
-
在 WPF 中创建的普通任务都应该在同一个线程上运行,即 Dispatcher 线程。但对于“长时间运行”的任务以及在线程池上显式创建的任务,情况并非如此。 msdn.microsoft.com/magazine/gg598924.aspx
-
Here 是一篇博客文章,介绍了如何构造为
async代码设计的读/写锁。
标签: c# .net multithreading readwritelock