<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" media="screen" href="/styles/xslt/rss.xslt"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:c9="http://channel9.msdn.com">
<channel>
	<title>Comment Feed for Channel 9 - Mads Torgersen: Inside C# Async</title>
	<atom:link rel="self" type="application/rss+xml" href="http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async/RSS"></atom:link>
	<image>
		<url>http://ecn.channel9.msdn.com/o9/ch9/f903/b4d164fc-0901-4f2f-8deb-9e150113f903/MadsTorgersenInsideAsync_100_ch9.jpg</url>
		<title>Channel 9 - Mads Torgersen: Inside C# Async</title>
		<link></link>
	</image>
	<description> Mads Torgersen, C# specification lead, describes the new C# features to improve asynchronous development. You can get an early look at this new async programming model, available as&amp;nbsp;the Async CTP, today! </description>
	<link></link>
	<language>en</language>
	<pubDate>Wed, 19 Jun 2013 09:45:27 GMT</pubDate>
	<lastBuildDate>Wed, 19 Jun 2013 09:45:27 GMT</lastBuildDate>
	<generator>Rev9</generator>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[If the implementation of the await feature is tied to the Task type, then why is it necessary to declare the method as async? In the familiar case of iterators the feature was dependent on the type alone (IEnumerable).&nbsp;Granted, because IEnumerable is an interface, it could be argued that in the case of async the keyword would&nbsp;accommodate&nbsp;hypothetical&nbsp;future types which wouldn't share the Task interface; but then why was not an interface type adopted for the async feature - IObservable, for instance - in the first place?<br />This kind of feels like too much given what we already know about previous language features. Specifically, what I would expect is to have an implementation of the familiar iterator&nbsp;syntax&nbsp;over an&nbsp;interface abstraction to asynchronous programming&nbsp;consuming the Task type behind the scenes. I'll admit that is fairly idealistic, but, as we know, every bit beyond that is potential bloat.<p>posted by Rafael</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239095570000000</link>
		<pubDate>Fri, 29 Oct 2010 00:39:17 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239095570000000</guid>
		<dc:creator>Rafael</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[This is good stuff, but I'm little confused on an idea where this may be used...<br />Example:&nbsp; Using Data Received event for incoming data on a Serial Port ( or a virtual USB COM port ).&nbsp; Would it be possible to have a Task to receive data from the port ( one byte at a time )&nbsp;and build a data packet.&nbsp; Once the packet is complete, it validates and parses the data and then returns the&nbsp;results to the UI for data binding to the UI's controls.&nbsp; Would this be a useful way to use this approach?<br />If this is true, then could you have Tasks work with other Task?&nbsp; Example: I have a main Task that is in control of sending/receiving data from the Serial Port.&nbsp; I then have many Tasks that can call the main Task to send/receive specific data for the calling Task.&nbsp; Once the main Task calls back to the calling Task, the calling Task can then send the specifc results back to the UI for binding.<br />Again, not sure if this would be appropriate approach, but seems like it would be nice for a data protocol stack.&nbsp;&nbsp;If so, this would be great.&nbsp; Thanks in advance.<p>posted by shaggygi</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239140020000000</link>
		<pubDate>Fri, 29 Oct 2010 01:53:22 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239140020000000</guid>
		<dc:creator>shaggygi</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[I'm with Rafael. Here's my immediate reaction and suggestions:<br />Drop the async keyword.<br />Allow IObservable as a third option to void and Task. yield return would return a value to the IObservable yield break would kill it.<br />Change var result = await T; to yeild await T; var result = T.Result;<br />Add foreach syntax for IObservable for async methods. IE. foreach(int i in SomeIOberservableOfInt) { DoStuff(i); } which works asynchronously as well.<br />That would be more coherent and much more awesome.<br />I was concerned how Eric and Rx was dropped abruptly. I think it's game changer and deserves more time and love.<p>posted by Sam</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239217520000000</link>
		<pubDate>Fri, 29 Oct 2010 04:02:32 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239217520000000</guid>
		<dc:creator>Sam</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[Is it just me, or does Mads resemble a young Harrison Ford? &nbsp;Get him an accent coach, and we could cast him as a young Han Solo in a future Star Wars movie or TV show... Professor Jones?<p>posted by Kris</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239281920000000</link>
		<pubDate>Fri, 29 Oct 2010 05:49:52 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239281920000000</guid>
		<dc:creator>Kris</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[ <p>I'm with Kris.</p><p>Professor Jones, totally.</p><p>posted by einarwh</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239342620000000</link>
		<pubDate>Fri, 29 Oct 2010 07:31:02 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239342620000000</guid>
		<dc:creator>einarwh</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[[quote]<br />6 hours&nbsp;ago<br />If the implementation of the await feature is tied to the Task type,...&nbsp;[/quote]<br />Hi, it's not tied to Task type, I downloaded the spec here http://go.microsoft.com/fwlink/?LinkId=204845&nbsp;and it says<br />[quote]<br />C# does not dictate a specific type for the representation of tasks that are await&rsquo;ed, as long as they satisfy a certain pattern. The types Task and Task&lt;T&gt; satisfy this pattern, and will be used in subsequent examples.<br />[quote]<p>posted by diryboy</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239347940000000</link>
		<pubDate>Fri, 29 Oct 2010 07:39:54 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239347940000000</guid>
		<dc:creator>diryboy</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[ <p>Very cool. I do mostly web development &amp; SharePoint development, so I am wondering if this will be useful to me at all. </p><p>posted by Chubbaca</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239713110000000</link>
		<pubDate>Fri, 29 Oct 2010 17:48:31 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239713110000000</guid>
		<dc:creator>Chubbaca</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[@diryboy:<br />Not true.&nbsp; From the document you link to: "An asynchronous function in C# must either return void or one of the types Task or Task&lt;T&gt;.".&nbsp; The flexibility is on what object can be "await"-ed for, but not on the return type of an "async" method.<br />Constraining the return type to Task&lt;T&gt; means that an asynchronous method returning a collection has to return the whole collection once it is done;&nbsp; it cannot return elements one-by-one as they arrive (which would be possible in the IObservable&lt;T&gt; pattern).<p>posted by Lukasz</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239893780000000</link>
		<pubDate>Fri, 29 Oct 2010 22:49:38 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239893780000000</guid>
		<dc:creator>Lukasz</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[I dont get the point of the async keyword.&nbsp; Why not just allow the await keyword anytime the method returns Task&lt;T&gt;, just like interators can yield return on any method that returns an IEnumerable&lt;T&gt;.<p>posted by devin</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239911510000000</link>
		<pubDate>Fri, 29 Oct 2010 23:19:11 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634239911510000000</guid>
		<dc:creator>devin</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[ <p>This is great talk from Mads!&nbsp;&nbsp;&nbsp;</p><p>&nbsp;</p><p>posted by DoubleUSeeF</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634240987630000000</link>
		<pubDate>Sun, 31 Oct 2010 05:12:43 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634240987630000000</guid>
		<dc:creator>DoubleUSeeF</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[ <p>Very nice stuff.</p><p>Charles, you should get Mads together with Brian Beckerman/Bart de Smet/Eric Meier and do &quot;Monads &amp; Async jam&quot; - it would be no fun if there were no monads <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif' alt='Smiley' /></p><p>posted by Kyrae</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634242195700000000</link>
		<pubDate>Mon, 01 Nov 2010 14:46:10 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634242195700000000</guid>
		<dc:creator>Kyrae</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[ <p><blockquote><div class="quoteText"></p><p><a class="permalink" title="Comment Permalink" href="/Shows/Going&#43;Deep/Mads-Torgersen-Inside-C-Async/Unlock?commentSlug=634242195700000000">3 hours&nbsp;ago</a>, <a href="/Niners/Kyrae">Kyrae</a> wrote</p><p>Very nice stuff.</p><p>Charles, you should get Mads together with Brian Beckerman/Bart de Smet/Eric Meier and do &quot;Monads &amp; Async jam&quot; - it would be no fun if there were no monads <img src="http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif" alt="Smiley"></p><p></div></blockquote></p><p><img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif' alt='Smiley' /></p><p>I do want to get Mads on 9 more often. He's a great conversationalist! Would be great to get Brian and Erik's perspective on this new language feature. Actually, you can get a glimpse of this (in terms of Erik) in the C9 Live piece with Erik and Wolfram Schulte. It's available at <a href="http://microsoftpdc.com">http://microsoftpdc.com</a> (check out the C9 Live on-demand stuff in the player).</p><p>C</p><p>posted by Charles</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634242332460000000</link>
		<pubDate>Mon, 01 Nov 2010 18:34:06 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634242332460000000</guid>
		<dc:creator>Charles</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[Very interesting.&nbsp; I must not have the model in my head correctly as I am still curious about the idea that no back-ground thread is ever consumed.&nbsp; How does the returned "Task" from an async method call ever change state to "completed" if there is no code execution (thread) involved?&nbsp; Similarly if I choose to "await" a Task, upon what thread does the code run that inspects the SynchronizationContext and initiates the supplied call-back into the state machine?<p>posted by bbattah</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634243180800000000</link>
		<pubDate>Tue, 02 Nov 2010 18:08:00 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634243180800000000</guid>
		<dc:creator>bbattah</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[ <p>Well when I think of Acync, I think of asynchronously&nbsp;pushing tasks waiting to be done on to a core which is the one next in line, which would also be specific per machine. I'm no C# coder but heres a Pseudo-C# way I think I could describe what I'm thinking.</p><p><pre class="brush: csharp">class DispatchThreadsAsync
{
  static void Main()
    {
      const int maxThreadCount = Enviroment.ProcessorCount;
      var workToBeDone  = new List&lt;Task&gt;();
      int threadNumber = 1;
      while (thread &lt; CONCURRENCY &amp;&amp; thread != 0)
      {
        foreach (int workItem in workToBeDone)
        {
          async workToBeDone.Add(ScheduleNextThreadAsync( threadNumber , workItem ));
        }
        threadNumber = thread.nextAvailableThread();
      }
   }
}</pre></p><p>So I mean that to capture a dynamically scheduled loop method thingy that schedules un-even workloads as threads onto cores which become available. Asynchronously creating/reusing/receiving&nbsp;thread tasks per&nbsp;work item in a work queue as long as work is available.</p><p>To me that would be a cool way to dynamically dispatch newly created work items and threads. &nbsp;And I'd suggest that the C# team see if this type of method for creating tasks of work to be done could be made into a nice little industrial-strength official C# 5.0&nbsp;asynchronous task method <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif?v=c9' alt='Smiley' /></p><p>As I said im no C# coder but I tried my best to pseudo-C# my point&nbsp;across by what I think would be a good abstraction <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-1.gif?v=c9' alt='Smiley' /> unless it already exists of course and I&nbsp;haven't&nbsp;looked hard enough <img src='http://ecn.channel9.msdn.com/o9/content/images/emoticons/emotion-4.gif?v=c9' alt='Tongue Out' /></p><p>posted by HeavensRevenge</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634244344750000000</link>
		<pubDate>Thu, 04 Nov 2010 02:27:55 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634244344750000000</guid>
		<dc:creator>HeavensRevenge</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[ <p>So maybe I'm missing something, but is there a way to create little pieces of asynchronous work without having to pull everything out of the method into its own async method? E.g. to use the WhenAll example... So if you start with something like</p><p><pre class="brush: csharp">public async Task&lt;List&lt;Result&gt;&gt; GetResults()
{
    var results = new List&lt;Result&gt;();
    foreach (var url in urls )
    {
         UnprocessedResult r = await DownloadResult(url);
         results.Add( processResult(r) );
    }
    return results;
} </pre></p><p>&nbsp;</p><p>But then to get the improved parallelism that they talk about in the video, you want to use WhenAll, so you do this:</p><p><pre class="brush: csharp">public async Task&lt;List&lt;Result&gt;&gt; GetResults()
{
    var results = new List&lt;Result&gt;();
    var tasks = new List&lt;Task&lt;result&gt;&gt;();
    foreach (var url in urls )
    {
         tasks.Add (DownloadResult(url));
    }
    await Task.WhenAll(tasks);
    foreach (var t in tasks)
    {
         results.Add( processResult(t.Result) );
     }
    return results;
} </pre></p><p>&nbsp;</p><p>The problem is the fact that we have to do the &quot;continuation&quot; of each task in a separate loop. One way of fixing this is to move the loop body out into its own async method which awaits DownloadResult and then processes it afterwards. Then the main function can just WaitAll on *those* tasks. But having to create a brand new method for tiny &quot;post-async-fixups&quot; is onerous. It would be cool if we could just create async lambdas, which we then call immediately, which then returns a task with the body inside it. E.g.:</p><p><pre class="brush: csharp">public async Task&lt;List&lt;Result&gt;&gt; GetResults()
{
    var results = new List&lt;Result&gt;();
    var tasks = new List&lt;Task&lt;UnprocessedResult&gt;&gt;();

    foreach (var url in urls )
    {
         // notice async lambda, that gets called immediately
         tasks.Add( async () =&gt; {
                 var r = await DownloadResult(url);
                results.Add( processResult( r ) );
         }() );        
    }

    await Task.WhenAll( tasks );
    return results;
} </pre></p><p>You can't call a lambda like that, so even with async lambdas it would be ugly:</p><p><pre class="brush: csharp">public async Task&lt;List&lt;Result&gt;&gt; GetResults()
{
    var results = new List&lt;Result&gt;();
    var tasks = new List&lt;Task&lt;UnprocessedResult&gt;&gt;();

    foreach (var url in urls )
    {
         // notice async lambda, that gets called immediately
         Func&lt;Task&lt;UnprocessedResult&gt;&gt; f = async () =&gt; {
                 var r = await DownloadResult(url);
                results.Add( processResult( r ) );
         };
         tasks.Add( f() );        
    }

    await Task.WhenAll( tasks );
    return results;
}</pre></p><p>Perhaps an alternate syntax which does the above would be in order?</p><p><pre class="brush: csharp">public async Task&lt;List&lt;Result&gt;&gt; GetResults()
{
    var results = new List&lt;Result&gt;();
    var tasks = new List&lt;Task&lt;UnprocessedResult&gt;&gt;();

    foreach (var url in urls )
    {
         tasks.Add( async {
                 var r = await DownloadResult(url);
                results.Add( processResult( r ) );
         });        
    }

    await Task.WhenAll( tasks );
    return results;
}</pre></p><p>Where &quot;async{ ...}&quot; just whips up a simple local Task that does the stuff in the body.</p><p>posted by ssylvan</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634247481650000000</link>
		<pubDate>Sun, 07 Nov 2010 17:36:05 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634247481650000000</guid>
		<dc:creator>ssylvan</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[Lots of good questions here. However, Channel 9 comments is not a great forum for Q&amp;A. Please post your additional&nbsp;questions to:<br />http://social.msdn.microsoft.com/Forums/en-US/async/threads<br />Regarding the question "why do we require the async modifier?" please see my answer here:<br />http://blogs.msdn.com/b/ericlippert/archive/2010/11/11/whither-async.aspx<br />&gt; How does the returned "Task" from an async method call ever change state to "completed" if there is no code execution (thread) involved?"<br />You don't need multiple threads to do more than one task. Look at it this way. You (a thread) run a sandwich shop (a service). Two people&nbsp;(clients of the service) come in and sit at different tables (enqueue themselves onto a work queue). A transaction consists of two tasks that must happen in order: take a sandwich request, and make the sandwich. Therefore there are going to be four tasks: two orders to take and two sandwiches to make.<br />You could do&nbsp;both transactions&nbsp;synchronously: take the order of&nbsp;the first customer, make their sandwich,&nbsp;take the order of the second customer, make their sandwich.&nbsp;Or you&nbsp;can do it asynchronously:&nbsp;you take the order of one customer, then take the order of the second customer, then resume the first transaction: make the first sandwich. Then resume the second transaction: make the second sandwich.&nbsp;Each task signals its completion when it is done, and the single thread then does the next task in the work queue. No multithreading is necessary to make two sandwiches *after* both orders are taken.&nbsp;You don't need two sandwich makers, or one waiter and one sandwich maker. You only need one thread.<br />Single-threaded asynchrony is simply about breaking up work into small pieces and then choosing a different order to do each part of the transaction, rather than doing all the work associated with one transaction before starting the next. You don't need a&nbsp;dozen waiters&nbsp; to serve a dozen tables ; you need one waiter who can split up the workflow associated with each table into chunks that are small and easily reordered so that no one table has to wait a long time for their next unit of work to be processed.<br />Of course, you *can* use concurrency with asynchrony, but asynchrony does not *require* concurrency.<br />&gt; if I choose to "await" a Task, upon what thread does the code run that inspects the SynchronizationContext and initiates the supplied call-back into the state machine?<br />That depends on the details of the task. Suppose you have a UI thread and a worker thread. If the task is awaited on the UI thread and runs on the worker thread then the task will typically signal its completion by posting a message from the worker thread to the UI thread. The completion then runs on the UI thread when the UI thread pumps messages.<br />&nbsp;<p>posted by Eric Lippert</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634250900250000000</link>
		<pubDate>Thu, 11 Nov 2010 16:33:45 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634250900250000000</guid>
		<dc:creator>Eric Lippert</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[Apparently all my paragraph breaks disappeared there. Weird. I hope that is legible.<p>posted by Eric Lippert</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634250900920000000</link>
		<pubDate>Thu, 11 Nov 2010 16:34:52 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634250900920000000</guid>
		<dc:creator>Eric Lippert</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[Hi !<br />Can you explain to me why we need await keyword in<br />await Task.WhenAll(tasks);<br />expression ?<br />At first, WhenAll method returns nothing, so what task we await ?<br />Then, WhenAll wait a completion of all tasks yet, so why we need extra await statement here?<br />&nbsp;<p>posted by Yury Serdyuk</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634260600730000000</link>
		<pubDate>Mon, 22 Nov 2010 22:01:13 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634260600730000000</guid>
		<dc:creator>Yury Serdyuk</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[Again all paragraph breaks disappeared. Sorry ...<p>posted by Yury Serdyuk</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634260601750000000</link>
		<pubDate>Mon, 22 Nov 2010 22:02:55 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634260601750000000</guid>
		<dc:creator>Yury Serdyuk</dc:creator>
	</item>
	<item>
		<title>Re: Mads Torgersen: Inside C# Async</title>
		<description>
			<![CDATA[Sorry, couldn't resist. Mads Torgersen here.<br />Yury: when you call WhenAll it immediately returns a Task representing the completion of all the Tasks you passed to it. When you await the returned Task you know that all those original Tasks have completed.<br />This is very useful for orchestrating "parallel" Tasks; e.g. multiple requests on the internet.<br />(Apologies in advance if my paragraph breaks disappear - I assure you they were there when I typed it!)<br />Mads<p>posted by Harrison Ford</p>]]>
		</description>
		<link>http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634276163800000000</link>
		<pubDate>Fri, 10 Dec 2010 22:19:40 GMT</pubDate>
		<guid isPermaLink="true">http://channel9.msdn.com/Shows/Going+Deep/Mads-Torgersen-Inside-C-Async#c634276163800000000</guid>
		<dc:creator>Harrison Ford</dc:creator>
	</item>
</channel>
</rss>