{"id":55934,"date":"2010-04-04T13:30:00","date_gmt":"2010-04-04T13:30:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/pfxteam\/2010\/04\/04\/a-tour-of-parallelextensionsextras\/"},"modified":"2010-04-04T13:30:00","modified_gmt":"2010-04-04T13:30:00","slug":"a-tour-of-parallelextensionsextras","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/dotnet\/a-tour-of-parallelextensionsextras\/","title":{"rendered":"A Tour of ParallelExtensionsExtras"},"content":{"rendered":"<p class=\"MsoNormal\"><span style=\"font-size: small\"><span style=\"font-family: Calibri\">Throughout the development of Parallel Extensions for the .NET Framework 4, we&rsquo;ve come across a myriad of situations where certain functionality would be useful in developing a particular application or library, but where that functionality isn&rsquo;t quite encapsulated in the bits we&rsquo;re shipping.<span>&nbsp; <\/span>Sometimes this functionality is too application-specific to be included in the core of the Framework, and other times we haven&rsquo;t been sure how broadly applicable the functionality is, nor did we have the time to fully design it, test it,&nbsp;solicit feedback on it, and so forth.<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: small\"><span style=\"font-family: Calibri\"><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: small\"><span style=\"font-family: Calibri\"><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: small\"><span style=\"font-family: Calibri\"><\/span><\/span><span style=\"font-family: Calibri;font-size: small\">Luckily, in the vast majority of these cases, we&rsquo;ve been able to build this functionality on top of the parallelizatino constructs provided in .NET 4, in some cases simply containing .NET 4 types and methods, and in other cases taking advantage of extensibility points provided in .NET 4 for the explicit purpose of enabling developers to provide their own customized functionality where the Framework leaves off.<span>&nbsp; <\/span>Over time, we&rsquo;ve amassed a wealth of code of this ilk, and we&rsquo;ve chosen to expose most of it through the ParallelExtensionsExtras project available as part of our .NET 4 samples, which can be downloaded at <\/span><a href=\"https:\/\/code.msdn.microsoft.com\/ParExtSamples\"><span style=\"font-family: Calibri;font-size: small\">https:\/\/code.msdn.microsoft.com\/ParExtSamples<\/span><\/a>.<\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<p class=\"MsoNormal\"><a href=\"https:\/\/code.msdn.microsoft.com\/ParExtSamples\"><span style=\"font-family: Calibri;font-size: small\">ParallelExtensionsExtras<\/span><\/a><span style=\"font-size: small\"><span style=\"font-family: Calibri\"> is not a fully tested nor stable code base, and we&rsquo;re continually augmenting it with additional functionality, but it does provide a wealth of code you can use as a starting point for your own solutions or simply as a learning tool to understand how various kinds of functionality might be implemented. <\/span><\/span><span style=\"font-size: small\"><span style=\"font-family: Calibri\">Starting today, we&rsquo;ll be presenting a series of blog posts in which we&rsquo;ll walk through a subset of this functionality, detailing its implementation and discussing how and when such functionality would be applicable.<span>&nbsp; <\/span>If you have any requests, questions, or comments along the way, please do let us know.<span>&nbsp; <\/span>In particular, we&rsquo;re very interested in knowing what, if any, of this functionality you&rsquo;d be interested in seeing productized and included in the .NET Framework in the future.<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: small\"><span style=\"font-family: Calibri\"><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: small\"><span style=\"font-family: Calibri\"><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: small\"><span style=\"font-family: Calibri\"><\/span><\/span><span style=\"font-size: small\"><span style=\"font-family: Calibri\">Enjoy!<\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: small\"><span style=\"font-family: Calibri\"><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: small\"><span style=\"font-family: Calibri\"><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: small\"><span style=\"font-family: Calibri\"><\/span><\/span><span style=\"font-size: small\"><span style=\"font-family: Calibri\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/tags\/ParallelExtensionsExtras\/default.aspx\">Posts thus far<\/a> in the series:<\/span><\/span><\/p>\n<ol>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/04\/9990343.aspx\">LINQ to Tasks<\/a><\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/04\/9990349.aspx\">Task&lt;TResult&gt;.ToObservable<\/a>&nbsp;<\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/05\/9990419.aspx\">Additional Task Extensions Methods<\/a>&nbsp;<\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/06\/9990420.aspx\">BlockingCollectionExtensions<\/a><\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/07\/9990421.aspx\">StaTaskScheduler<\/a><\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/08\/9990422.aspx\">ConcurrentExclusiveInterleave<\/a><\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/09\/9990424.aspx\">Additional TaskSchedulers<\/a><\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/12\/9990426.aspx\">ReductionVariable&lt;T&gt;<\/a><\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/13\/9990427.aspx\">ObjectPool&lt;T&gt;<\/a><\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/14\/9995613.aspx\">Pipeline<\/a><\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/15\/9995662.aspx\">ParallelDynamicInvoke<\/a><\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/23\/10001621.aspx\">AsyncCache<\/a><\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/27\/10003149.aspx\">AsyncCall<\/a><\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/04\/28\/10003583.aspx\">SingleItemPartitioner<\/a><\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/05\/04\/10007499.aspx\">Specialized&nbsp;Task Waiting<\/a>&nbsp;<\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\"><a href=\"https:\/\/blogs.msdn.com\/pfxteam\/archive\/2010\/05\/04\/10007557.aspx\">Async Tasks for WebClient, SmtpClient, and Ping<\/a>&nbsp;<\/span><\/div>\n<\/li>\n<li>\n<div class=\"MsoNormal\"><span style=\"font-family: Calibri;font-size: small\">More to come&#8230;<\/span><\/div>\n<\/li>\n<\/ol>\n<p class=\"MsoNormal\"><span style=\"font-size: small\"><span style=\"font-family: Calibri\"><\/p>\n<p><\/span><\/span>&nbsp;<\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Throughout the development of Parallel Extensions for the .NET Framework 4, we&rsquo;ve come across a myriad of situations where certain functionality would be useful in developing a particular application or library, but where that functionality isn&rsquo;t quite encapsulated in the bits we&rsquo;re shipping.&nbsp; Sometimes this functionality is too application-specific to be included in the core [&hellip;]<\/p>\n","protected":false},"author":360,"featured_media":58792,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[7908],"tags":[7907,7911,7909,7924],"class_list":["post-55934","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-pfxteam","tag-net-4","tag-code-samples","tag-parallel-extensions","tag-parallelextensionsextras"],"acf":[],"blog_post_summary":"<p>Throughout the development of Parallel Extensions for the .NET Framework 4, we&rsquo;ve come across a myriad of situations where certain functionality would be useful in developing a particular application or library, but where that functionality isn&rsquo;t quite encapsulated in the bits we&rsquo;re shipping.&nbsp; Sometimes this functionality is too application-specific to be included in the core [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/55934","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/users\/360"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/comments?post=55934"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/posts\/55934\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media\/58792"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/media?parent=55934"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/categories?post=55934"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/dotnet\/wp-json\/wp\/v2\/tags?post=55934"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}