Estou usando webClient.DownloadFile()
para baixar um arquivo, posso definir um tempo limite para isso, de modo que não demore tanto se não puder acessar o arquivo?
92
Experimente WebClient.DownloadFileAsync()
. Você pode ligar CancelAsync()
por cronômetro com seu próprio tempo limite.
var taskDownload = client.DownloadFileTaskAsync(new Uri("http://localhost/folder"),"filename")
e entãotaskDownload.Wait(TimeSpan.FromSeconds(5));
Minha resposta vem daqui
Você pode criar uma classe derivada, que definirá a propriedade de tempo limite da
WebRequest
classe base :e você pode usá-lo como a classe WebClient base.
fonte
request.Timeout
. Mensagem de erro'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?)
, o que estou perdendo?using
diretivas que são usadas por este trecho de código.Supondo que você queira fazer isso de forma síncrona, usando o método WebClient.OpenRead (...) e definindo o tempo limite no Stream que ele retorna, você obterá o resultado desejado:
Derivar de WebClient e substituir GetWebRequest (...) para definir o tempo limite sugerido por @Beniamin não funcionou para mim, mas funcionou.
fonte
stream.ReadTimeout
maior do que realmente demorou para executar a solicitação