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); }
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; }