BlipFace.Service.Communication.BlipCommunication.GetUpdate C# (CSharp) Метод

GetUpdate() публичный Метод

Pobiera status o podanym ID, w sposób synchroniczny
public GetUpdate ( string id ) : BlipStatus
id string
Результат BlipFace.Service.Entities.BlipStatus
        public BlipStatus GetUpdate(string id)
        {
            string query = string.Format("updates/{0}?include=user", id);

            //pobieramy odpowiedź

            BlipCommunicationState state = BlipCommunicationState.OK;
            Exception exp = null;
            HttpStatusCode httpCode = HttpStatusCode.OK;
            HttpResponseMessage resp = null;
            BlipStatus status = null;

            EventWaitHandle waitHandle = new AutoResetEvent(false);
            try
            {
                ThreadPool.QueueUserWorkItem(
                    c =>
                        {
                            try
                            {
                                lock (httpSyncClientLock)
                                {
                                    //to może długo trwać, a przebywanie w lock
                                    //za duługo może spowodować zakleszczenie
                                    resp = blipHttpClientSync.Get(query);
                                }

                                //to może długo trwać, a przebywanie w lock
                                //za duługo może spowodować zakleszczenie
                                //resp = blipHttpClient.Get(query);
                            }
                            catch (Exception)
                            {
                                //gdy wystąpiły jakieś błędy w komunikacji
                            }
                            finally
                            {
                                waitHandle.Set();
                            }
                        }
                    );

                waitHandle.WaitOne(WebGetTimout);

                if (resp != null && resp.StatusCode == HttpStatusCode.OK)
                {
                    resp.EnsureStatusIsSuccessful();
                    status = resp.Content.ReadAsJsonDataContract<BlipStatus>();
                }
            }
            catch (HttpStageProcessingException stageEx)
            {
                state = BlipCommunicationState.CommunicationError;
                httpCode = resp.StatusCode;
            }
            catch (ArgumentOutOfRangeException aorEx)
            {
                state = BlipCommunicationState.CommunicationError;
                httpCode = resp.StatusCode;
                //gdy wystąpiły jakieś błędy w komunikacji
            }
            catch (SerializationException serEx)
            {
                state = BlipCommunicationState.CommunicationError | BlipCommunicationState.Error;
                httpCode = resp.StatusCode;
                exp = serEx;
            }
            catch (Exception)
            {
                //jeśli nie uda się pobrać statusu to zwróć null
                return null;
            }
            finally
            {
                if (resp != null)
                {
                    resp.Dispose();
                    resp = null;
                }
            }
            if (((state & BlipCommunicationState.CommunicationError) == BlipCommunicationState.CommunicationError)
                && CommunicationError != null)
            {
                CommunicationError(null, new CommunicationErrorEventArgs(httpCode, BlipActions.AfterGetUpdate));
            }

            if ((state & BlipCommunicationState.Error) == BlipCommunicationState.Error && ExceptionOccure != null)
            {
                ExceptionOccure(null, new ExceptionEventArgs(exp));
            }

            return status;
        }