У меня возникла следующая проблема с моей реализацией RestSharp. Как я могу заставить приложение ждать ответа от ExecuteAsync()
, прежде чем продолжить?Ожидание ExecuteAsync() result
Я пробовал различные решения:
Первый (метод не ждать ответа ExecuteAsync):
public Task<Connection> Connect(string userId, string password)
{
var client = new RestClient(_baseUrl)
{
Authenticator = new SimpleAuthenticator("user", userId,
"password", password)
};
var tcs = new TaskCompletionSource<Connection>();
var request = new RestRequest(AppResources.Authenticating);
client.ExecuteAsync<Connection>(request, response =>
{
tcs.SetResult(new JsonDeserializer().
Deserialize<Connection>(response));
});
return tcs.Task;
}
Так что я попытался это, но приложение зависает:
public Task<Connection> Connect(string userId, string password)
{
EventWaitHandle executedCallBack = new AutoResetEvent(false);
var client = new RestClient(_baseUrl)
{
Authenticator = new SimpleAuthenticator("user", userId,
"password", password)
};
var tcs = new TaskCompletionSource<Connection>();
var request = new RestRequest(AppResources.Authenticating);
client.ExecuteAsync<Connection>(request, response =>
{
tcs.SetResult(new JsonDeserializer().
Deserialize<Connection>(response));
executedCallBack.Set();
});
executedCallBack.WaitOne();
return tcs.Task;
}
Что такое 'RestClient'? – Default
Это происходит из библиотеки 'RestSharp', своего рода' WebClient' – user2169047
, что такое Connection? Я не могу найти этот класс в RestSharp – adrian4aes