2015-09-17 7 views
6

Ich bin mit Asp.Net SignalR 2.SignalR entsorgen HubConnection

in einer .NET-Client (Ich verwende Microsoft.AspNet.SignalR.Client) wird Anordnen einer HubConnection notwendig? zu viel Zeit

Ich habe versucht zu tun, aber es dauert ....

Antwort

5

Es ist nicht notwendig, wenn Sie Stop() anrufen.

Siehe https://msdn.microsoft.com/en-us/library/dn235890(v=vs.118).aspx

sonst, sollten Sie immer Entsorgen IDisposable Objekte, wenn Sie mit ihnen fertig.

Wenn es zu lange dauert (d.h. den aktuellen Thread blockiert), einfach aufhört es auf einem Task, so etwas wie:

Task.Run(()=>hubConnection.Stop()); 
+1

Danke für Ihre Antwort. Ich rufe nicht 'stop()', wenn es genau dasselbe ist wie 'Dispose()'. Aus dem Signalquellenquellcode 'protected virtual void Dispose (bool disposing) { if (disposing) { Stop(); } } ' – cangosta

+1

Die Verbindung in einer separaten Task zu verteilen, ist der Trick, aber ist es eine gängige Praxis? – cangosta

+1

@cangosta, ja, es ist üblich, wenn Sie nicht möchten, dass die Entsorgung blockiert. –

1

Was meinst du mit es zu viel Zeit in Anspruch nimmt? Können Sie Details? Erhalten Sie eine Timeout-Ausnahme?

Aus dem Buch C# 5.0 in a Nutshell:

Eine sichere Regel (in fast allen Fällen) zu folgen ist, „im Zweifel, ob entsorgen.“ Einweg-Objekt -wenn es sprechen könnte-würde sagen Sie folgendes:

Wenn Sie mit mir fertig sind, lassen Sie es mich wissen. Wenn einfach aufgegeben, könnte ich Ursache für andere Objektinstanzen, die Anwendungsdomäne, den Computer, das Netzwerk oder die Datenbank verursachen!

Ich würde sagen, entsorgen, wenn es kein Dealbreaker ist. Auch könnte es nützlich sein, herauszufinden, was dort so lange dauert.

+0

Eigentlich ist es nur blockiert der laufende Faden und dann erfolgreich endet. Es werden keine Ausnahmen ausgelöst. Ich kann mir nicht vorstellen, warum es so viel Zeit in Anspruch nimmt. – cangosta

+2

es dauert 30 Sekunden, um das Objekt zu entsorgen – cangosta

+0

In der Tat ist 30 Sekunden das Standard-Timeout für den Entsorgungsvorgang. – cangosta