我试图在前台和BackgroundAgent之间同步对IsolatedStorage的访问。问题是,当我进入锁定时我有一个线程,但在等待存储访问后,该线程是另一个线程,我得到SynchronizationLockException。有人知道解决问题的方法吗?为什么线程首先不同?感谢
答案 0 :(得分:1)
您不能对async
代码使用线程仿射锁。在后台线程上使用async
代码,任何线程池线程都可以恢复async
方法。 UI线程也不是更好;在await
之后,您将在UI线程上恢复,但同时运行任意代码,这完全违背了锁的目的。
我建议你改用SemaphoreSlim
。
答案 1 :(得分:0)
后台代理在一个单独的过程中工作。
您不能使用SemaphoreSlim,因为您需要一个命名同步原语来同步两个进程。当我做你正在做的事情时,我使用了一个命名的Mutex
实例+阻塞文件IO API,它发生在一个线程中,但我只需要写几个千字节。
如果需要同时编写大文件,可以将它们异步写入临时文件,然后等待互斥锁,将临时文件重命名为目标文件名,然后释放互斥锁。