我希望提高我的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#的异步有点新意,所以我有点想知道我这样做是否正确。我是否正确启动了异步调用?
答案 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);
}