我试图同步前台和BackgroundAgent之间对BackgroundAgent的访问。问题是,当我进入锁时,我有一个线程,但是在等待存储访问之后,线程是另一个线程,我得到了SynchronizationLockException。有没有人知道解决这个问题的方法。为什么线程在一开始是不同的?谢谢
发布于 2014-08-16 20:19:17
不能用async代码使用线程仿射锁。使用后台线程上的async代码,任何线程池线程都可以恢复async方法。UI线程也不会更好;在await之后,您将继续使用UI线程,但是任何任意代码都会在此期间运行,这完全违背了锁的目的。
我建议您改用SemaphoreSlim。
发布于 2014-08-19 18:05:30
后台代理在一个单独的过程中工作。
您不能使用SemaphoreSlim,因为您需要一个命名的同步原语来同步两个进程。当我做您正在做的事情时,我使用了一个命名的Mutex实例+阻塞文件IO,它发生在一个线程中,但是我只需要编写几千字节的最大值。
如果需要并发编写大型文件,可以将它们异步写入临时文件,然后等待互斥,将临时文件重命名为目标文件名,然后释放互斥体。
https://stackoverflow.com/questions/25337293
复制相似问题