Tôi đang ghi đè phương thức trong thư viện lớp cơ sở. Tuy nhiên, bên trong thực hiện ghi đè của tôi, tôi đang sử dụng HttpClient mới, tất cả đều dựa trên các phương thức async. Do đó, tôi phải đánh dấu phương thức của tôi là async, có nghĩa là tôi cần phải thay đổi tham số trả về của phương thức từ chuỗi thành Task. Tuy nhiên trình biên dịch đưa ra một lỗi: "Các kiểu trả về phải là 'chuỗi' để phù hợp với thành viên ghi đè ...."Thay đổi thành viên bị ghi đè thành không đồng bộ
public class BaseClass
{
public virtual string GetName()
{
...
}
}
public class MyClass : BaseClass
{
public override async Task<string> GetName()
{
HttpClient httpClient = new HttpClient();
var response = await httpClient.GetAsync("");
if (response.IsSuccessStatusCode)
{
var responseContent = response.Content;
return await responseContent.ReadAsStringAsync();
}
return null;
}
}
Tất nhiên là giải pháp hiển nhiên sẽ là thay đổi kiểu trả về của getName() trong BaseClass vào Task < chuỗi >, nhưng tôi không kiểm soát được BaseClass vì nó là một thư viện bên ngoài;
giải pháp hiện tại của tôi là sử dụng các lớp HttpClient một cách đồng bộ, ví dụ: MyClass thay đổi như sau:
public class MyClass : BaseClass
{
public override string GetName()
{
HttpClient httpClient = new HttpClient();
var response = httpClient.GetAsync("");
if (response.Result.IsSuccessStatusCode)
{
var responseContent = response.Result.Content;
return responseContent.ReadAsStringAsync()
.Result;
}
return null;
}
}
Có cách nào khác để làm điều này?
Thật không may, không có giải pháp tốt (điều này vi phạm LSP). Bạn có thể tạo một trình bao bọc không đồng bộ không? – SLaks