Transactions for C# objects?

c#

Solution

Microsoft is working on it. Read about Software Transactional Memory.

- STM.NET

- STM.NET Team Blog

- Channel 9 Video: STM.NET: Who. What. Why.

- Papers on STM

They use a few different syntaxes:

// For those who like arrows
Atomic.Do(() => { 
    obj.Prop1 = value;
    obj.Prop2 = value;
    obj.Recalculate();
});

// For others who prefer exceptions
try { 
    obj.Prop1 = value;
    obj.Prop2 = value;
    obj.Recalculate();
}
catch (AtomicMarker) {
}

// we may get this in C#:
atomic { 
    obj.Prop1 = value;
    obj.Prop2 = value;
    obj.Recalculate();
}

Problem

Just curious, is there any support for transactions on plain C# objects? Like ``` 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 } } ``` Just to make answers more useful ;-) is there anything similar in other languages? Update on STM: here's what it claims: ``` atomic { x++; y--; throw; } ``` will leave x/y unchanged, including chained methods calls. Looks like what I ask for. At least it's very interesting. I think that's close enough. Also, there're similar things in other languages, for example Haskell STM. Notice I don't say that it should be used for production ;-)

Original source