这有点啰嗦,但这里......
鉴于我有这样的界面:
public interface IWebClientHelper
{
TPayload Get<TPayload>(string url);
}
的实现对Get
提供的 URL 进行调用,该 URL 将返回包含类型为TPayload
) 的 Json 对象的响应,并且该 Json 被反序列化TPayload
然后返回。
我想让Get
方法的实现异步(或者更具体地说,使方法中包含的 HTTP 调用Get
异步),但据我了解,这需要将Get
方法的签名更改为:
Task<TPayload> Get<TPayload>(string url);
我的目标是保持界面不变,所以我创建了第二个界面:
public interface IAsyncWebClientHelper
{
Task<TPayload> Get<TPayload>(string url);
}
并将其注入我的IWebClientHelper
. 所以现在我的实现IWebClientHelper
看起来像这样:
public TPayload Get<TPayload>(string url)
{
return _asyncWebClientHelper.Get<TPayload>(url).Result;
}
和包含该行的Get
方法_asyncWebClientHelper
message = await httpClient.GetAsync(url);
所以我不清楚的是:我认为该行将return _asyncWebClientHelper.Get<TPayload>(url).Result
阻止执行直到该方法返回是否正确?或者await
该方法中的关键字是否会释放线程,直到它收到来自 url 的响应?