मैं webClient.DownloadFile()
एक फ़ाइल डाउनलोड करने के लिए उपयोग कर रहा हूं क्या मैं इसके लिए एक समयबाह्य सेट कर सकता हूं ताकि यह फ़ाइल तक नहीं पहुंच सके?
जवाबों:
कोशिश करो WebClient.DownloadFileAsync()
। आप CancelAsync()
अपने टाइमआउट के साथ टाइमर से कॉल कर सकते हैं ।
var taskDownload = client.DownloadFileTaskAsync(new Uri("http://localhost/folder"),"filename")
और फिरtaskDownload.Wait(TimeSpan.FromSeconds(5));
आप एक व्युत्पन्न वर्ग बना सकते हैं, जो आधार WebRequest
वर्ग की टाइमआउट संपत्ति निर्धारित करेगा :
using System;
using System.Net;
public class WebDownload : WebClient
{
/// <summary>
/// Time in milliseconds
/// </summary>
public int Timeout { get; set; }
public WebDownload() : this(60000) { }
public WebDownload(int timeout)
{
this.Timeout = timeout;
}
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
if (request != null)
{
request.Timeout = this.Timeout;
}
return request;
}
}
और आप इसे बेस WebClient वर्ग की तरह उपयोग कर सकते हैं।
request.Timeout
। त्रुटि संदेश '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?)
, मुझे क्या याद आ रहा है?
using
निर्देश जोड़े हैं जो इस कोड स्निपेट द्वारा उपयोग किए जाते हैं।
मान लें कि आप WebClient.OpenRead (...) विधि का उपयोग करते हुए इसे तुल्यकालिक रूप से करना चाहते थे, और स्ट्रीम पर टाइमआउट सेट करना कि यह आपको वांछित परिणाम देगा:
using (var webClient = new WebClient())
using (var stream = webClient.OpenRead(streamingUri))
{
if (stream != null)
{
stream.ReadTimeout = Timeout.Infinite;
using (var reader = new StreamReader(stream, Encoding.UTF8, false))
{
string line;
while ((line = reader.ReadLine()) != null)
{
if (line != String.Empty)
{
Console.WriteLine("Count {0}", count++);
}
Console.WriteLine(line);
}
}
}
}
WebClient से प्राप्त करना और GetWebRequest (...) को ओवरटाइम करने का समय निर्धारित करने के लिए @Beniamin ने सुझाव दिया, मेरे लिए काम नहीं किया, लेकिन यह किया।
stream.ReadTimeout
वास्तव में अनुरोध को निष्पादित करने के लिए इससे बड़ा निर्दिष्ट करता हूं