J'utilise webrequest pour aller chercher des données d'image. L'URL peut être invoquée parfois. En cas d'URL invalide, begingetresponse prend un temps égal à la période de timeout. De plus, le contrôle ne répond plus pendant cette période. En d'autres termes, le rappel asynchrone ne fonctionne pas de manière asynchrone. Est-ce que ce comportement est attendu?webrequest.begingetresponse prend trop de temps lorsque l'url est invalide
try
{
// Async requests
WebRequest request = WebRequest.Create(uri);
request.Timeout = RequestTimeOut;
RequestObject requestObject = new RequestObject();
requestObject.Request = request;
request.BeginGetResponse(this.ProcessImage, requestObject);
}
catch (Exception)
{
ShowErrorMessage(uri);
}
private void ProcessImage(IAsyncResult asyncResult)
{
try
{
RequestObject requestObject = (RequestObject)asyncResult.AsyncState;
WebRequest request = requestObject.Request;
WebResponse response = request.EndGetResponse(asyncResult);
Bitmap tile = new Bitmap(response.GetResponseStream());
// do something
}
catch (Exception)
{
ShowErrorMessage();
}
}
Non, le comportement attendu serait que l'interface utilisateur reste réactive si vous utilisez BeginGetResponse. Pourriez-vous nous montrer un extrait du code où vous appelez BeginGetResponse? – bernhof
Avez-vous un moyen de valider cette URL avant de l'envoyer? Je présume que le serveur que vous demandez est une boîte noire pour vous, n'avez pas accès à ce code? – Sebastian
Je pense que je dois valider l'URL avant de l'utiliser plutôt que d'utiliser aveuglément l'URL. Je dois écrire plus de code :( – malay