2015-09-17 16 views
6

używam Asp.Net SignalR 2.SignalR dysponowania HubConnection

W kliencie NET (używam Microsoft.AspNet.SignalR.Client) jest umieszczenie HubConnection konieczne?

Próbowałem to robić, ale to zajmuje zbyt dużo czasu ....

Odpowiedz

5

Nie jest konieczne, jeśli dzwonisz pod numer Stop().

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

inaczej, należy zawsze utylizować IDisposable obiektów po zakończeniu ich stosowania.

Jeśli to trwa zbyt długo (to znaczy, blokowanie bieżącego wątku), po prostu zatrzymać go na Task, coś takiego:

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

Dzięki za odpowiedź. Nie nazywam 'stop()', gdy jest to dokładnie to samo, co 'Dispose()'. From the signalr source code 'protected virtual void Dispose (bool disposing) { if (disposing) { Stop(); } } ' – cangosta

+1

Utylizacja połączenia w osobnym zadaniu działa, ale czy jest to powszechna praktyka? – cangosta

+1

@cangosta, tak, jest powszechne, jeśli nie chcesz, aby zablokowanie go zablokowało. –

1

Co masz na myśli przez to zajmuje zbyt dużo czasu? Czy możesz szczegółowo? Czy otrzymujesz wyjątek timeout?

Z książki C# 5.0 w pigułce:

Bezpieczna zasada do naśladowania (w prawie wszystkich przypadkach) jest „w razie wątpliwości wyrzucać”. Jednorazowe obiekt -jeżeli to może mówić-by powiedz:

Kiedy skończysz ze mną, daj mi znać. Jeśli po prostu zostanie porzucony, mogę spowodować problemy w przypadku innych wystąpień obiektu, domeny aplikacji, komputera , sieci lub bazy danych!

Powiedziałbym, że zbywamy, jeśli nie jest to rozdanie konkurencyjne. Przydałoby się również dowiedzieć, co zajmuje tak dużo czasu.

+0

Właściwie, to po prostu blokuje uruchomiony wątek i wtedy kończy się pomyślnie. Nie są zgłaszane żadne wyjątki. Nie mogę się domyślić, dlaczego zabieranie czasu zabiera tyle czasu. – cangosta

+2

usunięcie obiektu zajmuje 30 sekund. – cangosta

+0

W rzeczywistości 30 sekund to domyślny limit czasu dla operacji utylizacji. – cangosta