Node.cs
No, the title is not a typo. There is so much noise around Node.js, I thought it would be fun to make a sample of how it would work in C# using the TPL. Here is how the hello world sample would look like:
public class HelloHandler : AbstractAsyncHandler
{
protected override Task ProcessRequestAsync(HttpContext context)
{
context.Response.ContentType = "text/plain";
return context.Response.Output.WriteAsync("Hello World!");
}
}And the code to make this happen:
public abstract class AbstractAsyncHandler : IHttpAsyncHandler
{
protected abstract Task ProcessRequestAsync(HttpContext context);
private Task ProcessRequestAsync(HttpContext context, AsyncCallback cb)
{
return ProcessRequestAsync(context)
.ContinueWith(task => cb(task));
}
public void ProcessRequest(HttpContext context)
{
ProcessRequestAsync(context).Wait();
}
public bool IsReusable
{
get { return true; }
}
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
{
return ProcessRequestAsync(context, cb);
}
public void EndProcessRequest(IAsyncResult result)
{
if (result == null)
return;
((Task)result).Dispose();
}
}And you are pretty much done. I combined this with a HttpHandlerFactory which does the routing, and you get fully async, and quite beautiful code.
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)






Comments
Troy Robinson replied on Thu, 2011/08/04 - 4:05pm