Ich verwende webClient.DownloadFile()
eine Datei herunterzuladen , kann ich einen Timeout für diesen Satz , so dass es nicht so lange dauern , wenn es nicht auf die Datei zugreifen kann?
92
Versuchen Sie es WebClient.DownloadFileAsync()
. Sie können CancelAsync()
per Timer mit Ihrer eigenen Zeitüberschreitung anrufen .
var taskDownload = client.DownloadFileTaskAsync(new Uri("http://localhost/folder"),"filename")
und danntaskDownload.Wait(TimeSpan.FromSeconds(5));
Meine Antwort kommt von hier
Sie können eine abgeleitete Klasse erstellen, die die Timeout-Eigenschaft der Basisklasse
WebRequest
festlegt:und Sie können es genau wie die Basis-WebClient-Klasse verwenden.
quelle
request.Timeout
. Fehlermeldung'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?)
, was fehlt mir?using
Anweisungen hinzugefügt , die von diesem Code-Snippet verwendet werden.Angenommen, Sie möchten dies synchron tun, indem Sie die WebClient.OpenRead (...) -Methode verwenden und das Zeitlimit für den zurückgegebenen Stream festlegen, erhalten Sie das gewünschte Ergebnis:
Das Ableiten von WebClient und das Überschreiben von GetWebRequest (...) zum Festlegen des von @Beniamin vorgeschlagenen Zeitlimits hat bei mir nicht funktioniert, aber das hat funktioniert.
quelle
stream.ReadTimeout
größeren