ASP MVC上的异步

本文关键字:异步 MVC ASP | 更新日期: 2023-09-27 18:19:32

我想提高我的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#的异步有点陌生,所以我有点想知道我这样做是否正确。我是否正确启动了异步调用?

ASP MVC上的异步

在ASP.NET上,应该避免使用Task.Run。这是因为Task.Run将通过使用另一个线程释放当前线程。因此,您会无端地受到额外上下文切换的惩罚。此代码将降低可扩展性和性能,而不是提高它

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

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