2013-08-26 62 views
7

Der folgende Code erstellt einen neuen Thread, der zuerst als Named Pipe-Client zum Senden von Parametern und anschließend als Server zum Abrufen von Ergebnissen fungiert. Danach führt es eine Funktion in einer anderen AppDomain aus, die als Named Pipes-Server fungiert und danach als Client die Ergebnisse zurücksendet.C# Alle Pipeinstanzen sind ausgelastet

Der Code wird im Durchschnitt einmal pro Sekunde aufgerufen und es funktionierte für 7+ Stunden. Aber irgendwann sind "system.io.ioexception alle Pipe-Instanzen sind beschäftigt" geworfen und sie verbinden sich danach nicht mehr. Hier zu surfen scheint, als könnte es daran liegen, dass die Pipe-Objekte nicht richtig verteilt wurden, aber ich denke, das ist alles gut, da sie innen mit Anweisungen arbeiten. Hat jemand eine Ahnung, was hier falsch sein könnte? Der Code ist in .NET 4.0 auf Windows Server 2008 ausgeführt

+3

Die Ausnahme ausgelöst wird, passiert werden können, wenn Sie versuchen, auf einmal ein Rohr von mehreren Threads zuzugreifen. Rohre sind nicht threadsicher, sind Sie sicher, dass Sie nicht gleichzeitig mit den beiden Fäden auf sie zugreifen? – hcb

+0

Beim Erstellen mehrerer Threads, die DoAction aufrufen, stürzt der Code beim ersten Aufruf ab, da eine zweite NamedPipeServerStream (PIPE_TO) -Instanz erstellt wird. Ich habe versucht, Lock (SyncToObject) hinzuzufügen, aber der Code ist noch zweimal eingegeben. Ich denke, weil es in einer separaten AppDomain ausgeführt wird, aber ich bin nicht sicher, wie Objekte in separaten Appdomains verwendet werden – Laurijssen

+0

Können Sie den Aufruf von AppDomainCallback() in die Aufgabe verschieben? Oder wird diese Methode automatisch in einem anderen Thread aufgerufen, weil sie sich in einer anderen Domäne befindet? – hcb

Antwort