Тип для параметра универсального типа Task<T>
должен быть просто типом объекта, который должен возвращать метод. Я не совсем уверен, в чем путаница. Вы на самом деле не предоставили никакой информации о том, с какими типами вы работаете, но в случае чего-то вроде ResourceLoginByUserName
вы, вероятно, захотите вернуть какой-то объект со статусом успеха / неудачи, токен доступа и список ошибок, если они были. Например:
public class LoginResult
{
public bool Succeeded { get; set; }
public string AccessToken { get; set; }
public List<string> Errors { get; set; } = new List<string>();
}
В этом случае возврат будет Task<LoginResult>
.
По сути, вам просто нужно создать класс, который моделирует информацию, которая, по вашему мнению, вам может понадобиться при вызове метода, и затем вернуть ее. В ситуации, когда вы что-то извлекаете, вы можете либо вернуть объект напрямую:
public Task<Foo> GetFoo(int id)
Или вы все еще можете создать специализированный класс результатов для предоставления дополнительной информации:
public class GetFooResult
{
public bool Succeeded { get; set; }
public Foo Foo { get; set; }
public List<string> Errors { get; set; }
}
Это зависит только от вас и от того, что вам нужно в вашем приложении. Я скажу, что лучше следовать шаблону для простоты. Например, вы всегда можете вернуть какой-то класс «результата», и тогда вы поймете, что всегда можете проверить result.Succeeded
на общее условие «пройти / не пройти».