.net multithreading transactions

.net - TransactionScope y multi-threading



multithreading (2)

Esto es correcto: la clase TransactionScope usa la propiedad Transaction.Current que almacena su valor en el campo, que está marcado con el atributo ThreadStatic .

El atributo ThreadStatic se asegura de que el valor del campo tenga afinidad por el hilo, es decir, tenga un valor único en cada hilo. Es el enfoque recomendado para compartir la fecha dentro de un hilo. También se lo conoce como Thread Local Storage (TLS).

La clase TransactionScope solo define un contexto de transacción en el hilo actual. Sin embargo, esto no significa que su código deba realizar todo el trabajo en ese hilo. Podría imaginarme un complejo algoritmo de cálculo que utiliza múltiples hilos.

Me preguntaba cómo usaría la clase TransactionScope de la manera correcta cuando se trata de multithreading.

Creamos un nuevo alcance en nuestro hilo principal y luego generamos un par de hilos de trabajo y queremos que estos participen en el alcance principal, de modo que, por ejemplo, se recurre a la reversión en cada trabajador si el alcance nunca se completa.

Leí algo sobre TransactionScope usando ThreadStaticAttribute internamente, lo que hizo que lo anterior fuera imposible / muy difícil. ¿Alguien podría verificar de cualquier manera? Si agotamos el código de forma sincrónica, las reversiones funcionan, es decir, las transacciones internas pueden participar en la transacción principal, pero no si cambiamos a una ejecución enhebrada.

Gracias


Ver MSDN :

También debe usar la clase TransactionScope y DependentTransaction para las aplicaciones que requieren el uso de la misma transacción en múltiples llamadas a funciones o llamadas a múltiples hilos.

Así que tal vez busquen en DependentTransaction , en particular, aquí hay un ejemplo de hilo de trabajador.