2 回答
TA贡献1773条经验 获得超3个赞
鉴于功能:
async Task<int> AccessTheWebAsync()
{
// You need to add a reference to System.Net.Http to declare client.
using (HttpClient client = new HttpClient())
{
Task<string> getStringTask = client.GetStringAsync("https://learn.microsoft.com");
DoIndependentWork();
string urlContents = await getStringTask;
return urlContents.Length;
}
}
当执行到
string urlContents = await getStringTask;
执行可以做两件事之一:
如果 GetStringAsync() 已经完成,则继续执行下一行(return urlContents.Length;)
如果 GetStringAsync() 尚未完成,则 AccessTheWebAsync() 的执行将暂停并返回到调用函数,直到 GetStringAsync() 完成。您询问的段落说明如果我们无论如何都暂停了 AccessTheWebAsync() 的执行,那么暂停然后返回到 AccessTheWebAsync 的费用将被浪费。 因此这不会发生,因为它足够聪明,知道什么时候暂停执行,什么时候不暂停执行。
TA贡献2019条经验 获得超9个赞
C# 中的异步方法必须始终返回一个任务,如下所示:
public async Task method();
public async Task<bool> asyncMethod();
当它不返回任何东西时,void 就返回Task,在任何其他情况下Task<returntype>
当你调用异步方法时,你可以做三件事:
// Result is now of type Task<object> and will run async with any code beyond this line.
// So using result in the code might result in it still being null or false.
var result = asyncMethod();
// Result is now type object, and any code below this line will wait for this to be executed.
// However the method that contains this code, must now also be async.
var result = await asyncMethod();
// Result is now type Task<object>, but result is bool, any code below this line will wait.
// The method with this code does not require to be async.
var result = asyncMethod().Result;
所以来回答你的问题。
考虑执行代码的结果是否在代码的其他地方使用,因为如果你不等待它,结果将被浪费,因为它仍然是 null。
反之亦然,当等待一个不会返回任何东西的方法时,通常不需要等待。
- 2 回答
- 0 关注
- 80 浏览
添加回答
举报