F# Webcast (III.) - Using Asynchronous Workflows
In this webcast, we'll look at improving the code for downloading and
processing RSS feeds that I presented in the second part
(if you didn't see earlier parts, the first one was an introduction to
basic functional ideas). The previous part demonstrated how to use .NET libraries
and we implemented a simple downloadUrl
function for obtaining content
of from the web and we've also seen how to load the data into an XML document object
and how to filter items. In this part, we'll modify the code to run asynchronously and
potentially in parallel. To use some of the functionality, you'll need to get
FSharp.PowerPack.dll
, which is available with the VS 2008 installation or
as a separated download for VS 2010 [4].
Now that we have the first version of the code, we can start refactoring it. I'm using the term in a slightly vague meaning - we're of course going to change the behavior of the code. We'll wrap it into F# asynchronous workflow to run without blocking threads and we'll also run multiple downloads in parallel. However, this can still be viewed as refactoring in some sense, because we're not changing the core behavior of the code. As you can see from the webcast, these kinds of refactorings are also very nicely supported by F# syntax...
F# Webcast Series
This webcast series follows the usual F# development process where you start with experimenting and writing an initial version of the solution interactively using the F# interactive tool. In the later phase of the process, we modify the code to make it parallel and asynchronous and finally, we can also encapsulate it into a standard .NET library that's usable from C#. Here is a list of all webcasts in the series:
- Part I. - Introducing functional concepts
The first part introduces functional programming principles such as immutability, recursion and functions that take other functions as parameter (higher order functions). This can all be demonstrated in C# 3.0, so we start with C# and then look how the same concepts look in F#. Finally, the first part also shows functions for working with lists in F#. - Part II. - Using standard .NET libraries
The second part demonstrates how we can use standard .NET libraries. It uses classes fromSystem.Net
andSystem.Xml
to download content of a web page (RSS feed), load it into XML document and process it to find only posts that contain some specified keyword. - Part III. - Downloading web pages asynchronously
The third part shows how to make the code from the part II. better. It introduces F# asynchronous workflows that can be used for writing code that doesn't block a thread when waiting for the completion of some I/O request. This part also shows how to modify the code to download and process multiple feeds in parallel. - Part IV. - Developing standard .NET libraries
In the fourth part, we look how to encapsulate the functionality written in F# into classes. We'll finally create a project (rather than just use F# scripts) and we'll wrap the code we wrote into a .NET class. We'll also look how to compile the project into DLL and how to use it from a simple C# web application.
Downloads
- Source code from the webcast (F# Script)
- Download the video (WMV format, 19.2MB)
- [1] Microsoft Visual Studio 2010 First Look - Microsoft.Com
- [2] Visual Studio 2010 Beta1 with F# is now available, plus matching F# CTP Update for VS2008 - Don Syme's WebLog
- [3] F# May CTP for Visual Studio 2008 - Microsoft Downloads
- [4] Microsoft F# PowerPack for .NET 4.0 Beta1 - Microsoft Downloads
Published: Friday, 5 June 2009, 3:39 AM
Author: Tomas Petricek
Typos: Send me a pull request!
Tags: functional, asynchronous, webcast, f#