J'utilise webClient.DownloadFile()
pour télécharger un fichier puis-je définir un délai pour cela afin que cela ne prenne pas si longtemps s'il ne peut pas accéder au fichier?
92
Essayez WebClient.DownloadFileAsync()
. Vous pouvez appeler CancelAsync()
par minuterie avec votre propre délai.
var taskDownload = client.DownloadFileTaskAsync(new Uri("http://localhost/folder"),"filename")
et puistaskDownload.Wait(TimeSpan.FromSeconds(5));
Ma réponse vient d' ici
Vous pouvez créer une classe dérivée, qui définira la propriété timeout de la
WebRequest
classe de base :et vous pouvez l'utiliser comme la classe WebClient de base.
la source
request.Timeout
. Message d'erreur'System.Net.WebRequest' does not contain a definition for 'Timeout' and no extension method 'Timeout' accepting a first argument of type 'System.Net.WebRequest' could be found (are you missing a using directive or an assembly reference?)
, que me manque-t-il?using
directives qui sont utilisées par cet extrait de code.En supposant que vous vouliez le faire de manière synchrone, utiliser la méthode WebClient.OpenRead (...) et définir le délai d'expiration sur le Stream qu'il renvoie vous donnera le résultat souhaité:
Dériver de WebClient et remplacer GetWebRequest (...) pour définir le délai d'expiration suggéré par @Beniamin n'a pas fonctionné pour moi, mais cela a fonctionné.
la source
stream.ReadTimeout
plus grand que ce qu'il a réellement fallu pour exécuter la demande