Пример #1
0
        private Task <ContentProviderResult> ExtractContent(ContentProviderHttpRequest request)
        {
            var validProviders = _contentProviders.Where(c => c.IsValidContent(request.RequestUri))
                                 .ToList();

            if (validProviders.Count == 0)
            {
                return(TaskAsyncHelper.FromResult <ContentProviderResult>(null));
            }

            var tasks = validProviders.Select(c => c.GetContent(request)).ToArray();

            var tcs = new TaskCompletionSource <ContentProviderResult>();

            Task.Factory.ContinueWhenAll(tasks, completedTasks =>
            {
                var faulted = completedTasks.FirstOrDefault(t => t.IsFaulted);
                if (faulted != null)
                {
                    tcs.SetException(faulted.Exception);
                }
                else if (completedTasks.Any(t => t.IsCanceled))
                {
                    tcs.SetCanceled();
                }
                else
                {
                    ContentProviderResult result = completedTasks.Select(t => t.Result)
                                                   .FirstOrDefault(content => content != null);
                    tcs.SetResult(result);
                }
            });

            return(tcs.Task);
        }
Пример #2
0
        protected ContentProviderResult ProcessResult(ContentProviderResult result)
        {
            if (IsCollapsible && result != null)
            {
                string contentTitle = String.Format(LanguageResources.Content_HeaderAndToggle, Encoder.HtmlEncode(result.Title));
                result.Content = String.Format(ContentFormat, contentTitle, string.Join(" ", BoxClasses), result.Content);
            }

            return result;
        }