RestSharpの実装で次の問題が発生します。ExecuteAsync()
続行する前に、アプリケーションからの応答を待機させるにはどうすればよいですか?
私はさまざまな解決策を試しました:
最初に(メソッドは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;
}