Đây là một chút hơi dài, nhưng ở đây đi ....Làm thế nào để chờ đợi trên Task.Result ảnh hưởng đến các phương thức async/await lồng nhau?
Cho rằng tôi có một giao diện như sau:
public interface IWebClientHelper
{
TPayload Get<TPayload>(string url);
}
Trường hợp thực hiện Get
thực hiện cuộc gọi đến URL được cung cấp, trong đó sẽ trả về một đáp ứng có chứa một đối tượng Json loại TPayload
), và rằng Json được deserialized thành TPayload
và sau đó quay trở lại.
Tôi muốn làm cho việc thực hiện các phương pháp không đồng bộ Get
(hay cụ thể hơn thực hiện cuộc gọi HTTP chứa trong Get
phương pháp không đồng bộ), nhưng như tôi hiểu nó, đó sẽ đòi hỏi rằng chữ ký của phương pháp Get
được thay đổi để:
Task<TPayload> Get<TPayload>(string url);
tôi nhằm giữ cho giao diện như nó có, vì vậy tôi đã tạo ra một giao diện thứ hai:
public interface IAsyncWebClientHelper
{
Task<TPayload> Get<TPayload>(string url);
}
và tiêm đó vào implem của tôi sự lôi kéo của IWebClientHelper
. Vì vậy bây giờ thực hiện của tôi IWebClientHelper
trông như thế này:
public TPayload Get<TPayload>(string url)
{
return _asyncWebClientHelper.Get<TPayload>(url).Result;
}
và phương pháp Get
của _asyncWebClientHelper
chứa dòng
message = await httpClient.GetAsync(url);
Vì vậy, những gì tôi không rõ ràng về vấn đề này là: Tôi thích hợp trong suy nghĩ rằng dòng return _asyncWebClientHelper.Get<TPayload>(url).Result
sẽ chặn thực thi cho đến khi phương thức đó trả về? Hay từ khóa await
bên trong phương thức đó sẽ giải phóng chuỗi cho đến khi nó nhận được phản hồi từ url?
Đó là tính năng đồng bộ hóa quá mức không đồng bộ. – usr