【发布时间】:2020-05-18 16:49:39
【问题描述】:
public interface IAuthenticationService
{
Task<TurnaResponse> RegisterUser(User user);
Task<TurnaResponse> LoginUser(string email, string password);
Task<TurnaResponse> ResetPassword(string userId, string password);
Task<TurnaResponse> ForgotPassword(string email);
Task<TurnaResponse> ProcessSession(string userId);
bool IsUserAuthenticated();
}
public async Task<TurnaResponse> ProcessSession(string userId)
{
UriBuilder builder = new UriBuilder(ApiConstants.BaseApiUrl)
{
Path = ApiConstants.ProcessSessionEndpoint
};
var query = System.Web.HttpUtility.ParseQueryString(builder.Query);
query["userId"] = userId;
builder.Query = query.ToString();
var result = await _genericRepository.GetAsync<TurnaResponse>(builder.ToString(), "");
result.Data = result.Data != null
? JsonConvert.DeserializeObject<User>(result.Data.ToString()) : result.Data;
_sessionResponse = (TurnaResponse)result;
return result;
}
如何调用下面的 ProcessSession 方法来获取返回 boolean 的 IsAuthenticated 方法中的响应对象?
public bool IsUserAuthenticated()
{
var result = !string.IsNullOrEmpty(_settingsService.UserIdSetting);
if (result)
{
ProcessSession(_settingsService.UserIdSetting);
result = _sessionResponse.Status;
}
return result;
}
【问题讨论】:
-
您可以按照以下答案中的建议将其转换为异步方法或调用 Sync-over-Async (这将冻结当前线程,直到该方法返回结果)。
_sessionResponse = ProcessSession(_settingsService.UserIdSetting).GetAwaiter().GetResult(); -
我试过这个,但是在它调用并从 API 方法中获取响应之后,它并没有带给 xamarin 代码。我想异步方法会引起混乱。
-
可能会导致死锁。然后使用答案。
标签: c# xamarin asynchronous