Ich möchte nur wissen, ob es sicher / gut ist, return
innerhalb eines using
Blocks anzurufen .
Zum Beispiel.
using(var scope = new TransactionScope())
{
// my core logic
return true; // if condition met else
return false;
scope.Complete();
}
Wir wissen, dass die zuletzt geschweifte Klammer abgesagt dispose()
wird. Aber was wird im obigen Fall sein, da return
die Kontrolle aus dem vorgegebenen Bereich (AFAIK) springt ...
- Wird ich
scope.Complete()
angerufen? - Und so für die
dispose()
Methode des Oszilloskops.
scope.Complete()
Anruf niemals von dem von Ihnen bereitgestellten Beispiel getroffen wird, sodass Ihre Transaktion immer zurückgesetzt wird.
using
's dispose()
aufgerufen wird, wird bei der Rückkehr die Funktion, die diesen using
Block enthält, zurückgegeben und alles, was dazu gehört, wird verwaist. Selbst wenn scope
es nicht "von der using
" entsorgt worden wäre (wie andere erklärten), wird es trotzdem entsorgt, weil die Funktion beendet wurde. Wenn C # eine goto
Aussage hätte - hast du schon gelacht? gut - dann, anstatt zurückzukehren, könnten Sie goto
nach der schließenden Klammer zurückkehren, ohne zurückzukehren. Logischerweise scope
wäre es immer noch möglich, aber Sie haben gerade goto
C # eingegeben, also wen interessiert die Logik in diesem Stadium?
using{}
Bereich beendet ist, werden die relevanten Objekte entsorgt,return
"brechen" den Bereich - so werden die Objekte wie erwartet entsorgt