<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="RSS_xslt_style.asp" version="1.0" ?>
<rss version="2.0" xmlns:WebWizForums="http://syndication.webwiz.co.uk/rss_namespace/">
 <channel>
  <title>DevForce Community Forum : Rich compiler support for the task-based asynchronous pattern.</title>
  <link>http://www.ideablade.com/forum/</link>
  <description>This is an XML content feed of; DevForce Community Forum : DevForce 2012 : Rich compiler support for the task-based asynchronous pattern.</description>
  <pubDate>Fri, 10 Apr 2026 19:00:32 -700</pubDate>
  <lastBuildDate>Tue, 09 Oct 2012 14:22:20 -700</lastBuildDate>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Web Wiz Forums 9.69</generator>
  <ttl>360</ttl>
  <WebWizForums:feedURL>www.ideablade.com/forum/RSS_post_feed.asp?TID=3703</WebWizForums:feedURL>
  <image>
   <title>DevForce Community Forum</title>
   <url>http://www.ideablade.com/forum/forum_images/IdeaBlade_logo_tm.png</url>
   <link>http://www.ideablade.com/forum/</link>
  </image>
  <item>
   <title>Rich compiler support for the task-based asynchronous pattern. : We received a great question via...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=3703&amp;PID=14799#14799</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=1057" rel="nofollow">johnl</a><br /><strong>Subject:</strong> 3703<br /><strong>Posted:</strong> 09-Oct-2012 at 2:22pm<br /><br /><p ="Ms&#111;normal">We received a great question via email today and I wanted to share it (and the answer!) with you:<br><table width="99%"><tr><td class="BBquote"><br>In the previous version of Devforce and MVVM, the ViewModel class called  the repository something like this</p><p ="Ms&#111;normal"> </p><p ="Ms&#111;normal"><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">     </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">private</span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">void</span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> FetchMembers()<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><font color="#3f3f3f"><span ="Apple-tab-span" style="white-space:pre">	</span>{<br></font></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>this</span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.IsBusy = </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">true</span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">;<br></span><span style="color: rgb63, 63, 63; font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>Repository.GetMembers(<br></span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">			</span>(members) =&gt; </span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><font color="#008000">// query success<br></font></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><font color="#3f3f3f"><span ="Apple-tab-span" style="white-space:pre">				</span>{<br></font></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">				</span>this</span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.IsBusy = </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">false</span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">;<br></span><span style="color: rgb63, 63, 63; font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">				</span>ResetMembersList(members);<br></span><span style="color: rgb63, 63, 63; font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">				</span>},<br></span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">			</span>(error) =&gt; </span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><font color="#008000">// failed<br></font></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><font color="#3f3f3f"><span ="Apple-tab-span" style="white-space:pre">				</span>{<br></font></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">					</span>this</span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.IsBusy = </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">false</span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">;<br></span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">					</span>DisplayMessage(error.</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Message</span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">);<br></span><span style="color: rgb63, 63, 63; font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">				</span>});<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><font color="#3f3f3f"><span ="Apple-tab-span" style="white-space:pre">			</span>}<br></font></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">private</span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">void</span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> ResetMembersList(</span><span style="font-family: C&#111;nsolas; color: rgb43, 145, 175; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">IEnumerable</span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">&lt;</span><span style="font-family: C&#111;nsolas; color: rgb43, 145, 175; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Member</span><span style="font-family: C&#111;nsolas; color: rgb63, 63, 63; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">&gt; members)<br></span><span style="color: rgb63, 63, 63; font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>{<br></span><span style="color: rgb63, 63, 63; font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>Members.Clear();<br></span><span style="color: rgb63, 63, 63; font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>members.ForEach(Members.Add);<br></span><span style="color: rgb63, 63, 63; font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>}</span></p><p ="Ms&#111;normal"> </p><p ="Ms&#111;normal"><p ="Ms&#111;normal">Now using Async and Devforce 2012, my GetMembersAsync returns a Task&lt;IEnumerable&lt;Member&gt;&gt;.  It doesn’t seem right that the ViewModel receives a Task and has to decipher the result and pull it apart to get the result. It would seem more logical to have a Task service. In my Task service I have a GetMembers method that calls the GetMembersAsync method of the Repository. The ViewModel calls this method now and no longer calls the Repository. The GetMembers method gets back a Task. It is responsible for determining the outline of the call, unbundling the result and send back an IEnumerable collection back to the ViewModel. Now the ViewModel does not have to know about Tasks. It puts a layer between the ViewModel and Repository. </p><p ="Ms&#111;normal"> </p><p ="Ms&#111;normal">What do you think about this idea? Is there a better way to do this?</p><p ="Ms&#111;normal"></td></tr></table></p><p ="Ms&#111;normal"><p ="Ms&#111;normal"><span style="COLOR: #1f497d">Yes, what you are describing as a service is all handled by the compiler. R</span><span style="color: rgb31, 73, 125; ">ich compiler support for the Task-based Asynchronous Pattern</span><span style="color: rgb31, 73, 125; ">&nbsp;does it all for you. You rarely touch the actual Task.  So, let’s look at how this would look with the example below. As you said GetMemberAsync returns Task&lt;IEnumerable&lt;Member&gt;&gt;, so the FetchMembers method done properly looks like this. The async keyword tells the compiler that it needs to apply the magic sauce.</span></p><p ="Ms&#111;normal"><span style="COLOR: #1f497d"> </span></p><p ="Ms&#111;normal"><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">        </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">private</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="FONT-FAMILY: C&#111;nsolas; : yellow; COLOR: blue; FONT-SIZE: 9.5pt">async</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">void</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> FetchMembers()<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>{<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><font color="#0000ff"><span ="Apple-tab-span" style="white-space:pre">		</span>try<br></font></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>{<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">			</span>this</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">IsBusy</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> = </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">true</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">;<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">			</span>ResetMembersList(</span><span style="FONT-FAMILY: C&#111;nsolas; : yellow; COLOR: blue; FONT-SIZE: 9.5pt">await</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Repository</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.GetMembersAsync());<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>}<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>catch</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> (</span><span style="font-family: C&#111;nsolas; color: rgb43, 145, 175; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Exception</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> error)<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>{<br></span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">			</span>DisplayMessage</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">(error.Message);<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>}<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><font color="#0000ff"><span ="Apple-tab-span" style="white-space:pre">		</span>finally<br></font></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>{<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">			</span>this</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">IsBusy</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> = </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">false</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">;<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>}<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>}<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">	</span>private</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">void</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> ResetMembersList(</span><span style="font-family: C&#111;nsolas; color: rgb43, 145, 175; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">IEnumerable</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">&lt;</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Member</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">&gt; members)<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>{<br></span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>Members</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.Clear();<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>members.</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">ForEach</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">(</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Members</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.Add);<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>}</span></p><p ="Ms&#111;normal"><span style="COLOR: #1f497d"></span></p><p ="Ms&#111;normal"><span style="COLOR: #1f497d"> </span></p><p ="Ms&#111;normal"><span style="COLOR: #1f497d">Notice, you never need to “decipher” the Task. If GetMemberAsync succeeds, the await keyword extracts the result and passes it to ResetMembersList. If GetMemberAsync fails, await throws an exception, which you can simply handle with the try catch and you can take care of the busy state in the finally. One of the great things about the Task-based Asynchronous Pattern is that you write the code as if it was synchronous, except you put await in front of asynchronous methods.</span></p><p ="Ms&#111;normal"><span style="COLOR: #1f497d"> </span></p><p ="Ms&#111;normal"><span style="COLOR: #1f497d"></span></p><p ="Ms&#111;normal"><span style="COLOR: #1f497d"> </span></p><p ="Ms&#111;normal"><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">private</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">async</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Task</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> FetchMembers()<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>{<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><font color="#0000ff"><span ="Apple-tab-span" style="white-space:pre">		</span>try<br></font></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>{<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">			</span>this</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">IsBusy</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> = </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">true</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">;<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">			</span>ResetMembersList(</span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">await</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Repository</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.GetMembersAsync());<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>}<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>catch</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> (</span><span style="font-family: C&#111;nsolas; color: rgb43, 145, 175; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Exception</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> error)<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>{<br></span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">			</span>DisplayMessage</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">(error.Message);<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>}<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><font color="#0000ff"><span ="Apple-tab-span" style="white-space:pre">		</span>finally<br></font></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>{<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">			</span>this</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">IsBusy</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> = </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">false</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">;<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>}<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>}<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">private</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">void</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> ResetMembersList(</span><span style="font-family: C&#111;nsolas; color: rgb43, 145, 175; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">IEnumerable</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">&lt;</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Member</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">&gt; members)<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>{<br></span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>Members</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.Clear();<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>members.</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">ForEach</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">(</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Members</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.Add);<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>}</span></p><p ="Ms&#111;normal"><span style="COLOR: #1f497d"></span></p><p ="Ms&#111;normal"><span style="COLOR: #1f497d"> </span></p><p ="Ms&#111;normal"><span style="COLOR: #1f497d">If you also want to return a result value, you can do that to. Let’s say you want FetchMembers to return the list of members. In that case it would look like this.</span></p><p ="Ms&#111;normal"><span style="COLOR: #1f497d"> </span></p><p ="Ms&#111;normal"><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">        </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">private</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">async</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="font-family: C&#111;nsolas; color: rgb43, 145, 175; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Task</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">&lt;</span><span style="font-family: C&#111;nsolas; color: rgb43, 145, 175; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">IEnumerable</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">&lt;</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Member</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">&gt;&gt; FetchMembers()<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; ">{<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><font color="#0000ff"><span ="Apple-tab-span" style="white-space:pre">	</span>try<br></font></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>{<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>this</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">IsBusy</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> = </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">true</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">;<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>var</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> members = </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">await</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Repository</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.GetMembersAsync();<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">		</span>ResetMembersList(members);<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>return</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> members;<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>}<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">	</span>catch</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> (</span><span style="font-family: C&#111;nsolas; color: rgb43, 145, 175; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Exception</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> error)<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>{<br></span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>DisplayMessage</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">(error.Message);<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>throw</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> error;   </span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><font color="#008000">// Fail Task<br></font></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>}<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><font color="#0000ff"><span ="Apple-tab-span" style="white-space:pre">	</span>finally<br></font></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>{<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>this</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">IsBusy</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> = </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">false</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">;<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>}<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; ">}<br></span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">private</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> </span><span style="font-family: C&#111;nsolas; color: blue; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">void</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "> ResetMembersList(</span><span style="font-family: C&#111;nsolas; color: rgb43, 145, 175; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">IEnumerable</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">&lt;</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Member</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">&gt; members)<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>{<br></span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>Members</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.Clear();<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; "><span ="Apple-tab-span" style="white-space:pre">		</span>members.</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">ForEach</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">(</span><span style="font-family: C&#111;nsolas; color: red; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">Members</span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; -: initial initial; -repeat: initial initial; ">.Add);<br></span><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "><span ="Apple-tab-span" style="white-space:pre">	</span>}</span></p><p ="Ms&#111;normal"><span style="font-family: C&#111;nsolas; font-size: 9.5pt; "></span></p><p ="Ms&#111;normal"><span style="COLOR: #1f497d"> </span></p><p ="Ms&#111;normal"><span style="COLOR: #1f497d">Again, notice you don’t actually return Task&lt;IEnumberable&lt;Member&gt;&gt;, you just return IEnumerable&lt;Member&gt; and the compiler packages that up in the returned Task. In case of an error, just re-throw the exception and the compiler will then fault the Task, so that the caller knows not to try to extract the result value.</span></p></p></p><p ="Ms&#111;normal"></p>]]>
   </description>
   <pubDate>Tue, 09 Oct 2012 14:22:20 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=3703&amp;PID=14799#14799</guid>
  </item> 
 </channel>
</rss>