【发布时间】:2019-09-19 16:02:19
【问题描述】:
在关于eliding async await的文章中,有一个例子如下:
public Task<string> GetElidingKeywordsAsync(string url)
{
using (var client = new HttpClient())
return client.GetStringAsync(url);
}
他是这样描述流程的:
使用 GetElidingKeywordsAsync,代码会这样做:
创建 HttpClient 对象。
调用 GetStringAsync,它返回一个 未完成的任务。
释放 HttpClient 对象。
返回从 GetStringAsync 返回的任务。
为什么流程不如下?
-
创建 HttpClient 对象。
-
释放 HttpClient 对象。
-
调用 GetStringAsync,并返回从 GetStringAsync 返回的任务。
【问题讨论】:
-
GetStringAysn 方法一被调用就被调用,但是它还没有完成,但是由于它是aysn,我们没有等待结果,代码执行到下一行,从而处理客户端对象.异步方法在被调用时被调用,你以为你很困惑,因为你希望它只有在我们尝试从任务中获取结果时才会被调用。
-
您的问题不是关于 async/await 而是关于语句、它们的范围和花括号的使用。我会在标题和问题中明确说明。
标签: c# async-await