Desde que salió la Content Preview de la programación asíncrona en .NET, he estado con ganas de hacer cosas con ello. Y ya que la versión del GIT de Mono ya soporta async, quería darle un tiento.

Llevaba tiempo queriendo pasarme a .NET para el desarrollo web, pero quería tener más control sobre lo que está pasando que con ASP.NET o ASP.NET MVC. Tener un servidor FastCGI como librería soportando FastCGI y un sistema de templates WIP comptible con django/twig que es posible que acabe porteando a Roslyn CTP, me anima bastante a ponerme a ello.

El servidor de fastcgi asíncrono + nginx va genial, mucho mejor que una implementación de FastCGI que hice con Threads.

La gracia de usar el fastcgi asíncrono está en hacer la gestión de peticiones también asíncrona.

class Program  
{  
    class MyFastcgiServerAsync : FastcgiServerAsync  
    {  
        public override async Task HandleRequestAsync(FastcgiRequestAsync Request)  
        {  
            var StreamWriter = new StreamWriter(Request.Stdout);  
            await StreamWriter.WriteAsync("Content-type: text/html\r\n");  
            await StreamWriter.WriteAsync("\r\n");  
            await StreamWriter.WriteAsync("Hello World!");  
            await StreamWriter.FlushAsync();  
        }  
    }  

    static void Main(string[] args)  
    {  
        new MyFastcgiServerAsync().Listen(8000);  
    }  
}  

Código fuente: Gestor de peticiones FastCGI asíncronoLibrería FastCGI asíncrona