public TrendsList GetTrends()
        {
            TrendsList trendsList = new TrendsList();

            TrendsList currentTrendsList = new TrendsList();
            try
            {
                TwitterCredentials accessToken = new TwitterAuthService().Authenticate();
                string headerName = "Authorization";
                string headerValue = accessToken.User + " " + accessToken.Token;

                JSONConnector JSONConnector = new JSONConnector();
                JArray currentTrendsArray = JSONConnector.GetJSONArrayWithHeader(CURRENT_TRENDS_URL, headerName, headerValue);

                new TwitterTrendsParser().Parse(currentTrendsArray, currentTrendsList);
            }
            catch (Exception exception)
            {
                ErrorService.Log("TwitterTrendsService", "GetTrends", null, exception);
            }

            if (twitterTrendsQueue.Count >= QUEUE_SIZE)
            {
                twitterTrendsQueue.Dequeue();
            }
            twitterTrendsQueue.Enqueue(currentTrendsList);
            foreach (TrendsList twitterTrendsList in twitterTrendsQueue)
            {
                trendsList.AddTrends(twitterTrendsList);
            }

            return trendsList;
        }
        static private TrendsList BuildTrends()
        {
            TrendsList trendsList = null;

            try
            {
                ManualResetEvent[] doneEvents = new ManualResetEvent[8];

                doneEvents[0] = new ManualResetEvent(false);
                TrendsWorkerThread googleWorkerThread = new TrendsWorkerThread(new GoogleTrendsService(), doneEvents[0]);
                ThreadPool.QueueUserWorkItem(googleWorkerThread.ThreadPoolCallback);

                doneEvents[1] = new ManualResetEvent(false);
                TrendsWorkerThread twitterWorkerThread = new TrendsWorkerThread(new TwitterTrendsService(), doneEvents[1]);
                ThreadPool.QueueUserWorkItem(twitterWorkerThread.ThreadPoolCallback);

                doneEvents[2] = new ManualResetEvent(false);
                TrendsWorkerThread yahooWorkerThread = new TrendsWorkerThread(new YahooTrendsService(), doneEvents[2]);
                ThreadPool.QueueUserWorkItem(yahooWorkerThread.ThreadPoolCallback);

                doneEvents[3] = new ManualResetEvent(false);
                TrendsWorkerThread whatTheTrendCurrentWorkerThread = new TrendsWorkerThread(new WhatTheTrendTrendsService(WhatTheTrendTypeEnum.Current), doneEvents[3]);
                ThreadPool.QueueUserWorkItem(whatTheTrendCurrentWorkerThread.ThreadPoolCallback);

                doneEvents[4] = new ManualResetEvent(false);
                TrendsWorkerThread whatTheTrendMostEditedWorkerThread = new TrendsWorkerThread(new WhatTheTrendTrendsService(WhatTheTrendTypeEnum.MostEdited), doneEvents[4]);
                ThreadPool.QueueUserWorkItem(whatTheTrendMostEditedWorkerThread.ThreadPoolCallback);

                doneEvents[5] = new ManualResetEvent(false);
                TrendsWorkerThread alexaWorkerThread = new TrendsWorkerThread(new AlexaTrendsService(), doneEvents[5]);
                ThreadPool.QueueUserWorkItem(alexaWorkerThread.ThreadPoolCallback);

                doneEvents[6] = new ManualResetEvent(false);
                TrendsWorkerThread iTunesSongsWorkerThread = new TrendsWorkerThread(new ITunesTrendsService(ITunesTypeEnum.Top10Songs), doneEvents[6]);
                ThreadPool.QueueUserWorkItem(iTunesSongsWorkerThread.ThreadPoolCallback);

                doneEvents[7] = new ManualResetEvent(false);
                TrendsWorkerThread iTunesMoviesWorkerThread = new TrendsWorkerThread(new ITunesTrendsService(ITunesTypeEnum.TopMovies), doneEvents[7]);
                ThreadPool.QueueUserWorkItem(iTunesMoviesWorkerThread.ThreadPoolCallback);

                WaitHandle.WaitAll(doneEvents);

                trendsList = new TrendsList();
                trendsList.AddTrends(googleWorkerThread.TrendsList);
                trendsList.AddTrends(yahooWorkerThread.TrendsList);
                trendsList.AddTrends(twitterWorkerThread.TrendsList);
                trendsList.AddTrends(whatTheTrendCurrentWorkerThread.TrendsList);
                trendsList.AddTrends(whatTheTrendMostEditedWorkerThread.TrendsList);
                trendsList.AddTrends(alexaWorkerThread.TrendsList);
                trendsList.AddTrends(iTunesSongsWorkerThread.TrendsList);
                trendsList.AddTrends(iTunesMoviesWorkerThread.TrendsList);

                if (trendsList != null && trendsList.Count() > 0)
                {
                    trendsList.Sort(new TrendItemComparer(TrendItemComparerEnum.Title));
                }
            }
            catch (Exception exception)
            {
                ErrorService.Log("TrendsBuilder", "BuildTrends", "", exception);
            }

            return trendsList;
        }