Aln*_*dru 1 c# asynchronous async-await
我对异步编程的方式有疑问并等待.我知道当方法是异步时你可以使用await来等待特定代码的执行,但我想了解更多.
所以我有一个具体的问题:
想象一下,我有一个方法:
public async void Starter()
{
string username = await GetUserNameFromDBAsync();
bool updated = await UpdateUserTown();
}
public async static Task<string> GetUserNameFromDBAsync()
{
using(DBContext context = new DBContext())
{
return await context.User.FindByIdAsync(currentid).Name;
}
}
public async static Task<bool> UpdateUserTown()
{
using(DBContext context = new DBContext())
{
User user = await context.User.FindUserByIDAsync(currentid);
user.Town="New Town";
try
{
context.SaveChangesAsync();
}
catch(Exception ex)
{return false}
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
好的做这个代码,虽然我在任何地方都使用异步,但是我必须等待...所以基本上对于性能而言,它将完全相同,如果我将删除所有这些异步并等待并且没有...
或许我想念一些东西?
在桌面应用程序中,async不是关于性能,而是关于响应性.在执行长时间运行的I/O绑定操作时,您不希望应用程序的GUI冻结.实现这一目标的通常方法是通过线程,但是线程昂贵且难以正确同步,如果您想要做的就是在从Web服务中提取数据时保持UI响应,那么它们就太过分了.
在Web应用程序中,拥有一个async控制器可以让您的网站同时处理更多请求,因为您的控制器运行的线程可以返回到线程池,并在等待您的awaits完成时提供更多请求.
此外,在你的代码记:你应该永远不会有一些标记为async void,除非它是一个事件处理程序.您不能await使用async void方法,也无法捕获发生的异常.相反,如果您的方法没有返回任何内容,请使用async Task.
| 归档时间: |
|
| 查看次数: |
152 次 |
| 最近记录: |