ASP MVC上的异步

时间:2015-10-27 00:52:47

标签: c# asp.net-mvc

我希望提高我的Web应用程序的性能,以应对未来的可伸缩性问题,

我想到的一个场景是,如果我需要一个需要从数据库中过滤的列表。

这是我做的草稿:

public IEnumerable<test> getL(IEnumerable<test> filter)
{
        //do some filtering from the list then return it
        return filter;
}



public async Task<ActionResult> Index()
{
      context con = new context();       
      //do more stuff of stuff
      IEnumerable<test> get = await Task.Run(() => { return getL(con.dep.ToList()); });   
      return View(get);
}

我对C#的异步有点新意,所以我有点想知道我这样做是否正确。我是否正确启动了异步调用?

1 个答案:

答案 0 :(得分:1)

在ASP.NET上,您应该避免使用Task.Run。这是因为Task.Run将使用另一个线程释放当前线程。所以你无缘无故地承担额外的上下文切换的惩罚。此代码将降低可伸缩性和性能,而不是增加它。

相反,使用await进行基于I / O的任务。例如,从数据库获取数据:

public async Task<ActionResult> Index()
{
  context con = new context();       
  var list = await con.dep.ToListAsync();
  IEnumerable<test> get = getL(list);
  return View(get);
}