none
StreamWriter Timeout programmieren (Named Pipes) RRS feed

  • 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!

    Freitag, 9. Oktober 2020 08:39

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.


    Freitag, 9. Oktober 2020 11:22

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

    http://evgenij.smirnov.de

    Freitag, 9. Oktober 2020 09:04
  • Alles klar, danke für die schnelle Antwort!

    Das werde ich auf jeden Fall mal ausprobieren

    Freitag, 9. Oktober 2020 09:20
  • 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.


    Freitag, 9. Oktober 2020 11:22