BackgroundAgent ReaderWriterLockSlim同步

时间:2014-08-16 05:41:08

标签: multithreading background windows-phone synchronization

我试图在前台和BackgroundAgent之间同步对IsolatedStorage的访问。问题是,当我进入锁定时我有一个线程,但在等待存储访问后,该线程是另一个线程,我得到SynchronizationLockException。有人知道解决问题的方法吗?为什么线程首先不同?感谢

2 个答案:

答案 0 :(得分:1)

您不能对async代码使用线程仿射锁。在后台线程上使用async代码,任何线程池线程都可以恢复async方法。 UI线程也不是更好;在await之后,您将在UI线程上恢复,但同时运行任意代码,这完全违背了锁的目的

我建议你改用SemaphoreSlim

答案 1 :(得分:0)

后台代理在一个单独的过程中工作。

您不能使用SemaphoreSlim,因为您需要一个命名同步原语来同步两个进程。当我做你正在做的事情时,我使用了一个命名的Mutex实例+阻塞文件IO API,它发生在一个线程中,但我只需要写几个千字节。

如果需要同时编写大文件,可以将它们异步写入临时文件,然后等待互斥锁,将临时文件重命名为目标文件名,然后释放互斥锁。