Интересно, есть ли простой способ обработки какой-либо транзакции на C#. Скажем, что у нас есть два свойства, и мы хотели бы обновить их значения. Мы могли бы написать:Сделка в чистом C# кодировании
A = GetA();
B = GetB();
Проблема заключается в том, что если будет сгенерировано исключение при назначении B, то объект будет находиться в inconsistant состоянии, поскольку был обновлен. Мы можем решить эту проблему путем сохранения текущего значения 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 { A = GetA(); B = GetB(); }
Или код строительства, как:
Transaction.Enter();
A = GetA();
B = GetB();
Transaction.Leave();
Перед сделки государственная машина будет храниться и после операции он будет возвращен в случае исключение. В .NET есть что-то подобное?
[Программное обеспечение Transactional Memory] (http://en.wikipedia.org/wiki/Software_transactional_memory)? –
'tempA = GetA(); B = GetB(); A = tempA'? – cHao
@cHao A = tempA maight выдает исключение, так как мы не знаем, как реализован сеттер. –