Ich möchte nur wissen, ob es sicher / gut ist, returninnerhalb eines usingBlocks 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 returndie 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 usingBlock enthält, zurückgegeben und alles, was dazu gehört, wird verwaist. Selbst wenn scopees nicht "von der using" entsorgt worden wäre (wie andere erklärten), wird es trotzdem entsorgt, weil die Funktion beendet wurde. Wenn C # eine gotoAussage hätte - hast du schon gelacht? gut - dann, anstatt zurückzukehren, könnten Sie gotonach der schließenden Klammer zurückkehren, ohne zurückzukehren. Logischerweise scopewäre es immer noch möglich, aber Sie haben gerade gotoC # 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