通过以下方法:
public async Task<T> GetAsync(TResourceIdentifier identifier)
{
var responseMessage = await _httpClient.GetAsync(_addressSuffix + identifier);
if(responseMessage.IsSuccessStatusCode)
return await responseMessage.Content.ReadAsAsync<T>();
return null;
}
如果响应不成功,我将返回null,否则我将返回定义的T。
在同步方法中,我将通过ref (ref string errMsg)
传递一个字符串参数,该参数将带有http响应,但是我不确定如何通过异步调用来实现?我想做的是返回一个错误消息以及该对象(无论是否为空),如果失败则显示在我的winform消息上。我该怎么办?
答案 0 :(得分:0)
如果响应成功,我将返回null
那真的没有道理。带有Get
的方法告诉我应该返回一些东西。
我想做的是返回一条错误消息以及对象(无论是否为空),如果失败则显示在我的winform消息上。
您可以将响应包装在一个对象中,并使用the new pattern matching with the is
operator使代码看起来更具可读性:
public interface ICallResult { }
public class CallSuccessful : ICallResult { }
public class CallFail : ICallResult
{
public string Details { get; set; }
}
public async Task<ICallResult> GetAsync(TResourceIdentifier identifier)
用法:
if ((await o.GetAsync(identifier)) is CallFail callFail)
{
Console.WriteLine(callFail.Details);
}
// or
if ((await o.GetAsync(identifier)) is CallSuccessful)
{
}
一些最纯的类可能不喜欢使用空类,但是我认为空类的可读性,可维护性和可扩展性超出了空类的范围,但这实际上取决于您的上下文。