2016-07-11 6 views
1

ich folgende verstehen will, blockieren, nehme ich habe folgenden Codeblock:Aufruf für asynchrone Methode in try-catch-finally

try{ 
    // do something 
    asynchronousMethodCallThatWritesFileOutputStreamToSocket(fileOutputStream); 
}catch (SomeException e){ 
    //handle exception 
}finally{ 
    closeFileOutputStream(fileOutputStream); 
} 

Meine Frage wird den schließlich schließt Strom vor asynchronem Verfahren beendet blockieren? Oder wird es irgendwie warten? Bitte, irgendwelche Zitate aus den Büchern, wenn Sie wissen. Vielen Dank.

N.B. Das ist Pseudo-Code, ich kenne Muster mit Versuchen mit Ressourcen.

+1

Es wird zumindest versuchen, zu schließen. Der Punkt bei der Verwendung eines asynchronen Anrufs möchte nicht darauf warten, dass er beendet wird. Sie sollten also die Ressource entweder im asynchronen Aufruf oder in einem "Fertig" -Rückruf schließen. BTW: Du hättest das leicht herausfinden können ... – Fildor

+0

genau. Ich habe gerade einen Block im Code gefunden, und ich versuche vorherzusagen, was passieren wird. –

+1

Nun, ich würde erwarten, dass eine Exception entweder in den Schreib-Thread oder in den Thread geworfen wird, der versucht, die Datei zu schließen. Achten Sie auf Versuche/Fänge, die Ausnahmen stillschweigend verschlingen ... Aber die Vorhersage ist schwer, weil es immer noch möglich (wenn auch nicht wahrscheinlich) ist, dass der asynchrone Aufruf schnell genug ausgeführt wird, so dass der Abschluss ausgeführt wird, nachdem er abgeschlossen ist. – Fildor

Antwort

1

Das Programm wird immer mit einer nicht abgefangenen Ausnahme beendet, weil die async-Funktion nicht korrekt versucht wird.

Basierend auf Java Asynchronous Exceptions: Can I catch them?

Das einzige Problem ist, dass sie (Ausnahmen, ndr) an einer beliebigen Stelle in Ihrem Programm auftreten können, so sie zuverlässig zu kontrollieren ist hart. Sie müssten im Grunde die run Methode von allen Threads und die main Methode in einem try..catch Block, aber Sie können das nicht tun für Threads, die Sie nicht steuern (wie die Swing EDT oder Threads für Timer etc.)).

+0

danke, sauber und gerade –

Verwandte Themen