আমি 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;
}
}
এবং আপনি এটি বেস ওয়েবক্লিয়েন্ট শ্রেণীর মতোই ব্যবহার করতে পারেন।
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
এই কোড স্নিপেট ব্যবহার করে এমন নির্দেশিকা যুক্ত করেছি ।
ধরে নিই যে আপনি ওয়েবক্লিনেন্ট.অপেনআরিড (...) পদ্ধতিটি ব্যবহার করে এবং স্ট্রিমের সময়সীমা নির্ধারণ করে যা এটি প্রত্যাবর্তন করে তা আপনাকে কাঙ্ক্ষিত ফলাফল দেবে:
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);
}
}
}
}
ওয়েবক্লিয়েন্ট থেকে প্রাপ্ত এবং সময়সীমা নির্ধারণের জন্য getWebRequest (...) ওভাররাইড করা @ বেনিয়ামিন পরামর্শ দিয়েছেন, আমার পক্ষে সেভাবে কাজ করেনি, তবে এটি হয়েছে।
stream.ReadTimeout
অনুরোধটি বাস্তবায়নের জন্য বাস্তবে গ্রহণের চেয়ে বড় উল্লেখ করেছি