这个有点啰嗦,但我来试一下翻译....
假设我有以下接口:
我希望保持界面原样,因此我创建了第二个界面:
我将那部分内容注入到我的
假设我有以下接口:
Given that I have an interface like so:
public interface IWebClientHelper
{
TPayload Get<TPayload>(string url);
}
这里的Get
方法会调用提供的URL,返回一个包含类型为TPayload
的Json对象的响应。然后将该Json反序列化为TPayload
并返回。
我希望将Get
方法的实现异步化(或更具体地说,将Get
方法中包含的HTTP调用异步化),但据我所知,这需要改变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;
}
_asyncWebClientHelper
的Get
方法包含以下代码行:
message = await httpClient.GetAsync(url);
我不太清楚的是:我是否正确地认为这行代码 return _asyncWebClientHelper.Get<TPayload>(url).Result
会阻塞执行直到该方法返回?还是该方法内部的 await
关键字会释放线程,直到它从 url 接收到响应?