我不知道是否有一種簡單的方式來處理C#中的某種交易。讓我們說,我們有兩個屬性,我們想更新它們的值。我們可以這樣寫:在純粹的C#編碼交易
A = GetA();
B = GetB();
的問題是,如果異常將同時分配B時拋出,則對象將是不一致的狀態,因爲A已經更新。我們可以通過存儲的當前值和捕獲異常爲B打交道時解決這個問題:
var tempA = A;
A = GetA(); // A is up to date
try { B = GetB(); } catch { A = tempA; } // B is up to date also or A is reverted
即使上述方案未保存,因爲異常可以同時恢復一個被拋出,但問題是,如果有是在.NET中的機制中構建的,它簡單地實現了這些操作?
我能想象像下面的語句:
或代碼建設,如:
Transaction.Enter();
A = GetA();
B = GetB();
Transaction.Leave();
事務之前的機器狀態將被保存,交易完成後,將在以下情況下被還原例外。 .NET中是否有這樣的東西?
[軟件事務內存](http://en.wikipedia.org/wiki/Software_transactional_memory)? –
'tempA = GetA(); B = GetB(); A = tempA'? – cHao
@cHao A = tempA可能會拋出異常,因爲我們不知道如何實現setter。 –