我想使用C#中的任務同時從網站下載一些圖片。當調用WaitAll()時,應用程序掛起。這裏是我的代碼:使用異步任務下載圖像
HttpClient client = new HttpClient() { MaxResponseContentBufferSize = 1000000 };
List<Task<byte[]>> tasks = new List<Task<byte[]>>();
for (int i = 0; i < 10; i++)
{
string url = string.Format("http://www.myurl.com/files//53/{0}page.jpg",i);
Task<byte[]> download = ProcessURLAsync(url, client);
tasks.Add(download);
}
Task.WaitAll(tasks.ToArray());
和方法ProcessURLAsync:
async Task<byte[]> ProcessURLAsync(string url, HttpClient client)
{
var byteArray = await client.GetByteArrayAsync(url);
return byteArray;
}
您*可以*共享一個實例,但每個實例都會擁有自己的連接池,這可能會限制您的吞吐量。這裏的整點是爲了避免這一點,並同時下載。 –
@ReedCopsey對不起'可能油門'沒有對我說什麼。是否這樣做?我自己的經歷並不像你說的那樣表現出任何東西。 – EZI
這取決於您一次嘗試執行多少個連接。只有連接池允許單個實例下載的次數纔會成功。 –