I knew PDC10 has an OData endpoint which is http://odata.microsoftpdc.com/ODataSchedule.svc/ . The best part about  OData is querying for specific data that we are looking for. And here is my OData url for filtering twitter hashtag #languages

[sourcecode]

http://odata.microsoftpdc.com/ODataSchedule.svc/Sessions()?$filter=startswith(TwitterHashtag,’%23languages’)&$expand=DownloadableContent&$select=DownloadableContent

[/sourcecode]

With the above OData feed I could get urls for low bandwidth mp4’s that I can download. And here is the sample code for filtering

[sourcecode language=”csharp”]

var x =XDocument.Load(@“c:tempsession.xml”).Descendants().AsParallel().Where(xd => xd.Name.LocalName==“Url”

&& xd.Value.Contains(”_Low.mp4”)).Select (xd => xd.Value);

[/sourcecode]

Now that I have the url’s ,here is the code to download the videos using the new async feature

[sourcecode language=”csharp”]

using System;

using System.IO;

using System.Linq;

using System.Net;

using System.Threading.Tasks;

using System.Xml.Linq;

namespace Test

{

class Foo

{

static void Main(string[] args)

{

DownloadAsync();

Console.Read();

}

static async void DownloadAsync()

{

var result = new WebClient().DownloadStringTaskAsync(“http://odata.microsoftpdc.com/ODataSchedule.svc/Sessions()?$filter=startswith(TwitterHashtag,’%23languages’)&$expand=DownloadableContent&$select=DownloadableContent");

var downloads = XDocument.Parse(await result).Descendants().AsParallel().

Where(xd => xd.Name.LocalName == “Url” && xd.Value.Contains(”_Low.mp4”)).

Select(xd => new WebClient().DownloadFileTaskAsync(xd.Value, Path.GetFileName(xd.Value)));

await TaskEx.WhenAll(downloads).ContinueWith(_ => Console.WriteLine(“Downloading Complete”));

}

}

}

[/sourcecode]