2016-04-08 4 views
1

Gibt es eine Möglichkeit, mehrere TransactionScope s gleichzeitig in einem einzelnen .NET-Thread zu öffnen und zwischen ihnen zu wechseln? Etwas entlang der Linien von:Mehrere Transaktionsbereiche in einem Thread?

var tx1 = new TransactionScope(...); 
var tx2 = new TransactionScope(...); 

tx1.Use(); 
// do some database operations on tx1 

tx2.Use(); 
// do some database operations on tx2 
tx2.Complete(); 

tx1.Use(); 
// do some more database operations on tx1 
tx1.Complete(); 

ich einige Gleichzeitigkeit Situationen in meiner Datenbank testen möchten, und auf einem einzigen Thread die gleichzeitige Hersteller halten würde mir erlauben, sauberere Testcode zu schreiben:

producer1.DoA(); // must run in txA 
producer2.DoB(); // must run in txB 
... 

Antwort

0

I verwende jetzt einen alternativen Ansatz: Task Fortsetzungsaktionen in Kombination mit TransactionScopeAsyncFlowOption.Enabled. Liest wie ein Zauber und läuft auf verschiedenen Themen wie die zu testenden Originale.

Einige Pseudo-Code von meinem Test:

Task.Factory 
    .StartNew(OpenTx1_Insert1_DoNotCompleteTx1) 
    .ContinueWith(OpenTx2_Insert2_CompleteTx2) 
    .ContinueWith(Assert_SomeStuff) 
    .ContinueWith(CompleteTx1); 
+0

Sie könnten ein Stück Code teilen und Ihre eigene Antwort als akzeptierte Antwort markieren, so dass 1) die Menschen wissen, wie Sie das Problem gelöst, wenn sie hier ankommen über die Suche, und 2) die Frage wird nicht ohne eine akzeptierte Antwort hängen, und so von denen von uns angesehen werden, die hier hereingehen, um Fragen zu beantworten. –

+1

Sie können Ihre eigene Antwort nicht sofort akzeptieren - tun Sie es jetzt :-) Auch einige Beispielcode hinzugefügt. –

Verwandte Themen