基本クラス ライブラリのメソッドをオーバーライドしています。ただし、オーバーライドされた実装内では、すべて非同期メソッドに基づく新しい HttpClient を使用しています。したがって、メソッドを非同期としてマークする必要があります。つまり、メソッドの戻りパラメーターを文字列からタスクに変更する必要があります。ただし、コンパイラはエラーを出します:「オーバーライドされたメンバーと一致するには、戻り値の型は「文字列」でなければなりません....
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;
}
}
もちろん、明らかな解決策は、BaseClass の GetName() の戻り値の型を Task<string> に変更することですが、これは外部ライブラリであるため、BaseClass を制御することはできません。
私の現在の解決策は、HttpClient クラスを同期的に使用することです。つまり、MyClass を次のように変更します。
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;
}
}
これを行う他の方法はありますか?