Benutzer mit den meisten Antworten
StreamWriter Timeout programmieren (Named Pipes)

Frage
-
Hallo, ich verwende derzeit Named Pipes um zwischen mehreren Programmen zu kommunizieren. Die Powershell erstellt dazu mehrere PipeServer. Nun kann es passieren, dass mein PipeClient abstürzt und mein PipeServer trotzdem noch versucht WriteLine() an den abgestürzten Client zu schicken. Wie kann ich einen Timeout programmieren, der die WriteLine() Funktion nach x millisekunden abbricht, oder vor dem Schreiben überprüft, ob der Client bereit ist die Nachricht zu empfangen?
Einen Lösungsansatz den ich hatte, war Basestream.WriteTimeout zu verwenden, dieser Timeout ist für Named Pipes scheinbar nicht verfügbar. Ich hoffe jemandem fällt dazu noch etwas ein.
Vielen Dank im Voraus für die Hilfe!
Antworten
-
Siehe hier:
https://docs.microsoft.com/de-de/dotnet/api/system.io.streamwriter.writeasync?view=netcore-3.1#System_IO_StreamWriter_WriteAsync_System_ReadOnlyMemory_System_Char__System_Threading_CancellationToken_Ein Wait auf eine Task hat einen Timeout.
Durch den CancellationToken kannst du dann nach deinem Timeout den Vorgang abbrechen.
- Bearbeitet Der Suchende Freitag, 9. Oktober 2020 11:23
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 13. Oktober 2020 06:26
Alle Antworten
-
Moin,
da es keine PowerShell-Frage ist, empfehle ich Dir, sie entweder in einem .NET-Developer-Forum (https://social.msdn.microsoft.com/Forums/de-DE/home?forum=dotnetframeworkde) oder gleich auf Stack Overflow o.ä. zu stellen. In jedem Fall ist Deine Chance, eine gute Antwort zu bekommen, höher, wenn Du die Frage auf englisch und in einem englischsprachigen Forum stellst.
Mit dem Timeout kann ich Dir nicht helfen, zum Checken, ob noch einer zuhört, kannst Du mal schauen, ob BeginWrite() gefolgt von EndWrite() eine Exception wirft, falls ein Problem vorliegt. Doch auch da ist das Timeout m.E. nur auf der BaseStream-Ebene einstellbar.
Evgenij Smirnov
-
Siehe hier:
https://docs.microsoft.com/de-de/dotnet/api/system.io.streamwriter.writeasync?view=netcore-3.1#System_IO_StreamWriter_WriteAsync_System_ReadOnlyMemory_System_Char__System_Threading_CancellationToken_Ein Wait auf eine Task hat einen Timeout.
Durch den CancellationToken kannst du dann nach deinem Timeout den Vorgang abbrechen.
- Bearbeitet Der Suchende Freitag, 9. Oktober 2020 11:23
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 13. Oktober 2020 06:26