public static string DownloadString(string url) {
#if PORTABLE
            var request = WebRequest.Create(url);
            request.Method = "GET";

            System.Threading.Tasks.Task<WebResponse> task = System.Threading.Tasks.Task.Factory.FromAsync(
                request.BeginGetResponse,
                asyncResult => request.EndGetResponse(asyncResult),
                null);

            return task.ContinueWith(t => ReadStreamFromResponse(t.Result)).Result;
#else
            using (var client = new FastWebClient() {Timeout = 1500}) {
                client.Encoding = Encoding.UTF8;
                return client.DownloadString(url);
            }
#endif
        }
 private async Task _findBestQualityThumbnail() {
     //response from ytime varies on the user agent, usually 404 is thrown on invalid, but the default return is checked either way. has unique size of 120x80.
     using (var fw = new FastWebClient())
         foreach (var qurl in qualitypics) {
             var u = string.Format(qurl, _key);
             byte[] data;
             try {
                 data = await fw.DownloadDataTaskAsync(u);
             } catch (WebException we) when ((we.Response as HttpWebResponse)?.StatusCode==HttpStatusCode.NotFound) {
                 continue;
             }
             using (var ms = new MemoryStream(data)) 
                 using (var img = Image.FromStream(ms))
                     if (img.Size.Width == 120 && img.Width == 80) //Its the small default which makes it invalid
                         continue;
         
             _thumbnail = u;
             break;
         }
 }
  public static async Task<string> DownloadStringAsync(string url) {
     using (var client = new FastWebClient()  {Timeout = 1500}) {
         client.Encoding = Encoding.UTF8;
         return await client.DownloadStringTaskAsync(new Uri(url));
     }
 }