private void OnNext(ForumMetadataCollection obj)
        {
            // release awaiter
            this.IsBusy = false;
            SetOnItemsReady(true);

            Task<IEnumerable<ThreadDataGroup>>.Run(() => { return ProcessForums(obj); })
                .ContinueWith(task =>
                    {
                        OnProcessForumsCompleted(task.Result);
                    }, TaskScheduler.FromCurrentSynchronizationContext());
        }
        private IEnumerable<ThreadDataGroup> ProcessForums(ForumMetadataCollection obj)
        {
            List<ThreadDataGroup> list = new List<ThreadDataGroup>(obj.Count);
            foreach (var metadata in obj)
            {
                PinnedForumQuery query = new PinnedForumQuery(metadata.ForumID);
                NotificationService.Default.Notify(this, query);

                // categorize each forum
                ThreadDataGroup forum = new ThreadDataGroup(
                    metadata, 
                    query.IsPinned);

                forum.Group = categories[metadata.Category];
                forum.DataType = MainDataModel.DATATYPE_FORUM;

                // add to this collection
                list.Add(forum);
            }

            return list;
        }