我想问两个问题。
“如果GetStringAsync(因此getStringTask)在AccessTheWebAsync等待之前完成,则控制权仍保留在AccessTheWebAsync中。如果被调用的异步过程(getStringTask)已经完成并且AccessTheWebSync没有完成,则挂起然后返回到AccessTheWebAsync的开销将被浪费。必须等待最终结果。”
你能解释一下吗?
对不起,这是我第一次在StackOverflow上提问。
答案 0 :(得分:0)
C#中的异步方法必须始终返回Task,并且看起来像这样:
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。
反之亦然,当等待一个不会返回任何内容的方法时,通常不需要等待。
答案 1 :(得分:0)
给出功能:
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://docs.microsoft.com");
DoIndependentWork();
string urlContents = await getStringTask;
return urlContents.Length;
}
}
执行到
string urlContents = await getStringTask;
执行可以执行以下两项操作之一: