Simplemente curioso, ¿hay algún soporte para las transacciones en objetos simples C#? Como¿Transacciones para objetos C#?
using (var transaction = new ObjectTransaction(obj))
{
try
{
obj.Prop1 = value;
obj.Prop2 = value;
obj.Recalculate(); // may fire exception
transaction.Commit(); // now obj is saved
}
except
{
transaction.Rollback(); // now obj properties are restored
}
}
Solo para que las respuestas sean más útiles ;-) ¿Hay algo similar en otros idiomas?
Actualización sobre STM: esto es lo que dice:
atomic {
x++;
y--;
throw;
}
dejará x/y sin cambios, incluyendo encadenado métodos llamadas. Parece lo que pido. Al menos es muy interesante. Creo que eso es lo suficientemente cerca. Además, hay cosas similares en otros idiomas, por ejemplo, Haskell STM. Tenga en cuenta que no digo que deba usarse para producción ;-)
No STM tienen más que ver con el estado compartido y concurrencia de lo que hace la tradicional concepto de una transacción? –
@Robert Se maneja bastante bien. Puede usarlo de un solo subproceso si solo desea salvaguardar contra excepciones (obtiene reversión), o puede ejecutarlo en múltiples subprocesos. Single-threading es solo un caso degenerado de multihilo. :-) –