/ / BackgroundAgent ReaderWriterLockSlim sincronización - multihilo, fondo, windows-phone, sincronización

BackgroundAgent ReaderWriterLockSlim sincronización: multihilo, fondo, ventanas, teléfono, sincronización

Estoy tratando de sincronizar el acceso aAlmacenamiento aislado entre primer plano y agente de fondo. El problema es que cuando entro al bloqueo Tengo un subproceso, pero después de esperar en el acceso de almacenamiento, el subproceso es el otro y obtengo la excepción SynchronizationLockException. ¿Alguien sabe la manera de resolver el problema. ¿Por qué los hilos son diferentes en primer lugar? Gracias

Respuestas

1 para la respuesta № 1

Usted no puede usar bloqueos afines de hilos con async código. Con async código en subprocesos de fondo, cualquier subproceso de grupo de subprocesos puede reanudar el async método. Tampoco es mejor con hilos de interfaz de usuario; después de un await, se reanudará en el hilo de la interfaz de usuario, pero cualquier código arbitrario se ejecuta mientras tanto, que derrota completamente a la propósito de una cerradura.

Te recomiendo que uses SemaphoreSlim en lugar.


0 para la respuesta № 2

Los agentes de fondo trabajan en un proceso separado.

No puede usar SemaphoreSlim porque necesita una primitiva de sincronización con nombre para sincronizar dos procesos. Cuando hice lo que está haciendo, usé una Mutex instancia + bloqueo del archivo IO API que ocurre en un solo hilo, pero solo necesitaba escribir unos cuantos kilobytes como máximo.

Si necesita escribir simultáneamente archivos de gran tamaño, puede escribirlos de forma asíncrona en un archivo temporal, luego esperar el mutex, cambiar el nombre del archivo temporal al nombre del archivo de destino y luego soltar el mutex.