概要:
最近实现了一个API,该服务是host在linux服务器上的,基于于nginx+mono, 整个开发过程都是在mac上完成的,所以我用的IDE是Xamarin。
说到异步编程,我们就会想到 async 和 await关键字,用这两个关键字使异步变得非常的简单。为什么要用异步,我来讲个故事, 在一服务器上,它维护的线程是有限的,比如.net 4.5 framework, 线程池可维护的最大线程数大约是5000,假如我用同涉请求,当并发达到最大值时,服务器不会再响应请求,这样服务器就会返回503(sever too busy), 并且当并发增加时,服务器的响应速度越来越慢,因为多开一个线程大约要消耗内存,但是如果我们使用异步的话,处理同样的并发,线程就要少很多,因为它不会一直占用一个线程。故事就扯到这里,下面我们就来创建一下WebAPI项目
1,打开Xamarin Studio,创建一个基于C#的一个MVC项目(我用的是.net framework 4.5)
在Xamarin里没有WebAPI的模板,我们得手动引用类库
2,用NuGet引用Microsoft.AspNet.WebApi的库
3,创建一个名叫 AsyncController 类,引用System.Web.Http, 继承ApiController 如下代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Threading.Tasks;
namespace ThreadProcess.Controllers
{
public class AsyncController : ApiController
{
[System.Web.Http.AcceptVerbs("GET","POST")]
public async Task<IList<string>> GetProducts()
{
await Task.Delay(4000);
return new List<string>{"test1:","test2" };
}
}
}
4,增加一个 MapHttpRoute 在Global.asax里
public static void RegisterRoutes (RouteCollection routes)
{
routes.IgnoreRoute ("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapRoute (
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
}
经过上面的4步,我们的WebAPI环境就弄好了。

浙公网安备 33010602011771号