首页 新闻 会员 周边

关于async和await的疑问

0
悬赏园豆:20 [待解决问题]

下面的代码,有没有必要await

public async Task<int> GetAsync()
{
return await Db.GetAsync();
}

IAMOLDLI的主页 IAMOLDLI | 初学一级 | 园豆:154
提问于:2023-06-30 17:26
< >
分享
所有回答(5)
0

没有必要,可以直接return,如果在db.get里面且是在await之后的代码上抛出错误,生成的exception堆栈信息不会有public async Task<int> GetAsync() 这一帧

czd890 | 园豆:14412 (专家六级) | 2023-06-30 17:55
0

在给定的代码中,使用await是有必要的。

当你在一个异步方法中调用另一个异步方法时,使用await关键字可以暂时挂起当前方法的执行,等待被调用的异步方法完成后再继续执行当前方法的剩余部分。这样可以确保异步方法能够以非阻塞的方式执行,并且可以正确地处理异步操作的结果。

在你的代码中,Db.GetAsync()是一个异步方法,返回类型为Task<int>,表示它会异步返回一个int类型的结果。通过在调用的方法前加上await关键字,你告诉编译器你希望等待Db.GetAsync()方法的完成,并且将结果返回给调用者。

如果你省略了await,代码会变成以下形式:

csharp
Copy code
public async Task<int> GetAsync()
{
return Db.GetAsync(); // 缺少 await
}
这样做会导致返回的是一个未完成的Task<int>,而不是实际的int结果。这可能会引发潜在的问题,因为调用者可能会在未完成的任务上进行进一步的操作,而不是获取到真正的结果。

因此,在异步方法中,当你调用一个异步方法并希望等待它完成后再继续执行,你应该使用await关键字。这样可以确保异步方法的执行顺序和结果的正确性。

Technologyforgood | 园豆:5675 (大侠五级) | 2023-07-01 23:52
0

await是同步执行 会等待await函数执行后进行接下来的流程 ,接口异步(Async)通讯会导致无法正常返回数据 因为你的函数还没给出结果它就插队返回了 await的作用就是等待当前函数执行完毕走后面流程

黄子琪 | 园豆:219 (菜鸟二级) | 2023-07-03 18:37
0

public Task<int> GetAsync()
{
return Db.GetAsync();
} 试试这样行不行,然后再真正要使用到int结果的地方再await,这样可以提高程序的响应效率。

HelloLLLLL | 园豆:434 (菜鸟二级) | 2023-07-07 23:24
0

就你那样子写挺好的,await可以提高并发

度一 | 园豆:226 (菜鸟二级) | 2024-01-05 17:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册