2010-02-25 16 views

Antwort

3

Was Sie fordern ist Software Transactional Memory genannt. Da dies derzeit ein offener Bereich der Forschung ist und es derzeit keinen nativen C# -Sprachen-Support gibt, könnten Sie besser die existing synchronization options for C#, wie das lock Schlüsselwort, Monitore, Wait-Handles usw. verwenden.

Wenn Sie wirklich benötigen erweiterte Transaktionsfunktionen, gibt es viele library implementations, zum Beispiel < edit> SXM von Microsoft Research STM.NET </edit>.

+0

Ich weiß, das ist eine alte Antwort (und eine Frage), aber ich habe mich gerade über C# -Transaktionen für In-Memory-Operationen gewundert, und das gefunden. Die Links zu STM.NET scheinen jedoch tot zu sein. Wurde das Projekt eingestellt? Gibt es eine Alternative? – Shaamaan

+1

@Shaamaan: Die Wikipedia-Link hat auch eine Liste von Implementierungen: https: // en.wikipedia.org/wiki/Software_transactional_memory#C.23 – Heinzi

0

Es gibt keine SQL-ähnliche transactioning für C# Objekte, aber wenn dies, weil Sie threading Probleme haben, sollten Sie lock verwenden:

lock (myList) 
{ 
    if (myList.Count > 0) 
     myList.Clear(); 
} 

Dieses einfach löscht eine Liste, sondern sorgt dafür, es nicht modifiziert werden kann ein weiterer Thread zur gleichen Zeit.

1

Für eine nette Diskussion, wie Sie die Transaktion in OOP implementieren, werfen Sie einen Blick auf diese discussion. Dort werden das Memento und das Zustandsmuster hervorgehoben, um (unter anderen Methoden) Transaktionsverhalten zu erreichen.

3

Das könnte Sie interessieren: Software Transactional Memory. Es existiert eine Implementierung in der .NET-Welt mit dem Namen STM.NET.

Software Transactional Memory (STM.NET) ist ein Mechanismus für die effiziente Isolierung des gemeinsamen Staates. Der Programmierer grenzt eine Region des Codes als innerhalb einer Transaktion, die ist "atomaren" und "isoliert" von anderen transacted Code gleichzeitig ausgeführt wird ab. Hier

ist der Blog des Microsoft STM.NET Team: http://blogs.msdn.com/stmteam/

+0

Sie haben Recht mit STM, aber vergessen Sie nicht zu beachten, dass STM noch in Forschung, Entwicklung ist und ich nicht verwenden würde es in der Produktionssoftware. – Steven

1

Werfen Sie einen Blick auf Software Transactional Memory (STM.NET).

Es hat es nicht in .Net 4 machen, sondern ist als separater Download

1

Es gab eine Interesting article auf Joe Duffy Blog über den Versuch der MS Transactional Memory zu tun. Wenn ich es zusammenfassen würde, würde ich sagen: Mach es nur, wenn es zum Spaß ist.

0

Sie können die TransactionScope Class verwenden.

+0

Dies ist völlig falsch, das TransactionScope wird nur für DB – Idan

+0

verwendet. Humm .. nein. Es kann für alles verwendet werden, das IEnlistmentNotification implementiert – vtortola

Verwandte Themen