2015-09-17 25 views
6

sto utilizzando Asp.Net SignalR 2.SignalR smaltire HubConnection

In un client .NET (sto usando Microsoft.AspNet.SignalR.Client), sta disponendo un HubConnection necessaria?

ho provato a fare questo, ma ci vuole troppo tempo ....

risposta

5

Non è necessario se si chiama Stop().

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

in caso contrario, si dovrebbe sempre Smaltire IDisposable oggetti quando si è fatto con loro.

Se si sta impiegando troppo tempo (vale a dire, bloccando il thread corrente), basta fermarsi su una Task, qualcosa come:

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

Grazie per la risposta. Non sto chiamando 'stop()', una volta è esattamente la stessa cosa di 'Dispose()'. Dal codice sorgente del segnale 'protected virtual void Dispose (bool disposing) { if (disposing) { Stop(); }} ' – cangosta

+1

Smaltire la connessione in un'attività separata fa il trucco, ma è una pratica comune? – cangosta

+1

@cangosta, sì, è comune se non si desidera eliminarlo per bloccarlo. –

1

Che cosa si intende per ci vuole troppo tempo? Puoi dettagli? Stai ricevendo un'eccezione di timeout?

Dal libro C# 5.0 in a Nutshell:

Una regola di sicurezza da seguire (in quasi tutti i casi) è “in caso di dubbio, smaltire.” Un oggetto usa e getta -se potesse parlare, avrebbe di 'quanto segue:

Quando hai finito con me, fammi sapere. Se semplicemente abbandonato, potrei causare problemi ad altre istanze di oggetti, al dominio dell'applicazione, al computer , alla rete o al database!

Direi di smaltire se non è un dealbreaker. Potrebbe anche essere utile per scoprire cosa ci vuole così tanto tempo lì.

+0

In realtà, è a pochi isolati il ​​filo conduttore e poi finisce con successo. Non vengono lanciate eccezioni. Non riesco a capire perché ci vuole così tanto tempo per disporne. – cangosta

+2

ci vogliono 30 secondi per smaltire l'oggetto – cangosta

+0

In effetti, 30 secondi è il timeout predefinito per l'operazione di smaltimento. – cangosta