Asincronía en nuestras API REST con NancyFx
Una vez que hemos creado nuestra primera API REST con NancyFx, vamos a meternos más en faena.
Antes de entrar más en materia con rutas, respuestas, etc., me gustaría que viéramos como crear nuestras API REST con llamadas asíncronas.
Con NancyFX, crear llamadas asíncronas es algo tremendamente trivial.
De hecho, rescataré el ejemplo básico que he mostrado en otra entrada sobre NancyFx, el típico Hello World, y sobre él, haremos que nuestro método GET, sea asíncrono.
Recordemos que la asincronía no bloquea la hebra en la cuál se ejecuta el proceso.
Bien, veamos entonces el ejemplo inicial o de partida:
namespace WebAppNancyFx { public class HelloWorldModule : Nancy.NancyModule { public HelloWorldModule() { Get["/"] = _ => "Hello World!"; } } }
Para que nuestro método GET sea un método asíncrono, basta con indicarle explícitamente al método que es async.
Nuestro ejemplo anterior quedaría de la siguiente manera:
namespace WebAppNancyFx { using System.Threading; using System.Threading.Tasks; public class HelloWorldModule : Nancy.NancyModule { public HelloWorldModule() { Get["/", runAsync: true] = async (parameters, cancellationToken) => { return await GetHelloWorld(cancellationToken); }; } private async Task<string> GetHelloWorld(CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); return await Task.FromResult("Hello World!"); } } }
La llamada al método GET se realizará ahora síncronamente.
Las llamadas a métodos asíncronos en NancyFx es siempre de esta manera debido a que haciéndolo así, el equipo de NancyFx se aseguraba que eran compatibles para .NET Framework 4.0 y para .NET Framework 4.5 ó superior, sin romper nunca la compatibilidad.
Podrás acceder al código fuente de este ejemplo en mi repo de GitHub, en este enlace.
¡Happy Coding!