| 

.NET C# Java Javascript Exception

2
Ich weiß dass der Prozess blockiert wird wenn seine Streams (Error und Input Stream) nicht vollständig gelesen werden.
Bedeutet dass, das der Prozess fertig ist (all seine Aktion wurden ausgeführt) wenn die Streams vollständig gelesen wurden und terminiert sind (keine Daten mehr inhalten).
wenn nein, wie kann man sicher sein dass der Prozess terminiert ist?
Ich konnte darüber nichts in der DOku finden.
10.02.2015
sali 1 1
1 Antwort
1
Es kommt auf die Umsetzung an. Input-/OutputStream kann im Multithreading Programmen zu unerwarteten hängern führen wenn die Verbindung unterbrochen wird durch z.B. Netzwerk Aussetzer. Was genau passiert dir denn?

Ich kann dir im Axis 1.4 Framework zeigen das so etwas passieren kann wenn ich einen SOAP Service starte mit Timeout 0 und muss auf das Ergebnis warten. Nachdem meine Service Methode zuende war passierte im Stream erstmal nichts mehr und irgendwann hat der Timeout zugeschlagen, ansonsten hängt der Prozess bis zum Ende der Zeit.

Oder nimm eine Datenbankabfrage, bis das Ergebnis kommt, ist der Prozess gestoppt. Deswegen gibt man auch einen Timeout an bei dem die Datenbank nichtmal KeepAlive Pings mehr sendet oder wie auch immer der Treiber das gelöst hat (TNS Ping bei Oracle z.B.).

An sich ja, ein Stream kann immer zu hängenden Programmen führen, egal in welchem Umfeld. Daher immer in einer Finally Klausel den Stream zumachen, dann passiert das eigentlich nicht. Testen ist immer schwierig da das eine Racing Condition ist die man einfach nicht voraussehen kann und den Operator einfach so trifft, welcher meist dann auf dich zu kommt und frägt was da passiert.
07.03.2015
Lord_Pinhead 778 8

Stelle deine Java-Frage jetzt!