0

重複の可能性:
C# オブジェクトのトランザクション?

私の質問は、特定のセグメント内のすべてのコードが実行されるか、何も実行されないようにするための最良の方法は何ですか? この場合、Try Catch は機能しません。なぜなら、行 1 が更新の場合は実行され、行 2 が電子メールの送信であり、何らかの理由で失敗した場合、例外がスローされますが、更新は実行されているためです。すでに(私が欲しいのはこのようなものです-> 40行目が失敗した場合は、20行目を実行しないでください)。

データベース側でトランザクションを使用できることは知っていますが、コードに同等のものがあるかどうか疑問に思っていました...

4

2 に答える 2

5

Transactions ensure atomicity by performing roll-backs in case of error. But not all actions can be rolled back, for example, sending a mail. Its an arrow out of the bow, not coming back.

Short answer is that this cannot be done.

UPDATE: @JustinNiessner's comment above links to this excellent question that suggests some work in this area. But note that it cannot be guaranteed except in simplest cases. Specifically, it is probably very difficult to rollback i/o side-effects.

于 2013-01-25T18:12:15.007 に答える
0

一般に、作成したステートメントをロールバックできるものはありません。

ただし、コードの特定の部分にサポート トランザクションを追加することは可能です。この場合、分散トランザクションが役立つ場合があります。

于 2013-01-25T18:17:57.327 に答える