Skip to content

Instantly share code, notes, and snippets.

@vmarquez
Last active December 17, 2015 15:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vmarquez/5632123 to your computer and use it in GitHub Desktop.
Save vmarquez/5632123 to your computer and use it in GitHub Desktop.
Usage for monadic Future in C#
using System;
using System.Threading;
using XSharpx;
using System.Collections;
using System.Net;
namespace TestProj
{
class MainClass
{
public static void Main (string[] args)
{
Console.WriteLine ("Total Page size for search engines");
var c = new CountdownEvent(1);
//all calls happening concurrently
var googPF = GetPageFuture ("http://www.google.com");
var bingPF = GetPageFuture ("http://www.bing.com");
var ddgPF = GetPageFuture ("http://www.duckduckgo.com");
//now we sequence the results in an easy to read fashion wihtout callbacks
var totalPageSize =
from googlePage in googPF
from bingPage in bingPF
from ddgPage in ddgPF
select googlePage.ToCharArray().Length + bingPage.ToCharArray().Length + ddgPage.ToCharArray().Length;
totalPageSize.Map (s => {
Console.WriteLine ("Total size is = " + s);
return c.Signal();
});
Console.WriteLine ("At the end of main");
c.Wait();
}
public static Future<String> GetPageFuture (String str)
{
return Future.Create (()=>GetPage (str));
}
public static String GetPage (String str)
{
var ret = "";
using (var client = new WebClient()) {
ret = client.DownloadString (str);
}
return ret;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment