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.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);
}