![](/img/trans.png)
[英]How to Create http Web Request in Windows Phone Silverlight Project?
[英]Windows Phone, Multiple HTTP request parallel, how many?
在我的Windows Phone 8應用程序中,我從web api獲取項目列表。 之后,我循環所有項目並獲取每個項目的詳細信息。
現在我的代碼是這樣的:
List<plane> planes = await planeService.getPlanes(); // Get all planes from web api
foreach(Plane plane in planes)
{
var details = await planeService.getDetails(plane.id); // Get one plane details from web api
drawDetails(details);
}
如何改進此功能以並行生成多個請求以及並行運行的請求數量是多少? 飛機列表可以是0到100個對象,通常最多20個。
如何改進此功能以並行提出多個請求?
您可以執行如下所示的並行處理(未經測試)。 它使用SemaphoreSlim
來限制getDetails
請求。
async Task ProcessPlanes()
{
const int MAX_REQUESTS = 50;
List<plane> planes = await planeService.getPlanes(); // Get all planes from web api
var semaphore = new SemaphoreSlim(MAX_REQUESTS);
Func<string, Task<Details>> getDetailsAsync = async (id) =>
{
await semaphore.WaitAsync();
try
{
var details = await planeService.getDetails(id);
drawDetails(details);
return details;
}
finally
{
semaphore.Release();
}
};
var tasks = planes.Select((plane) =>
getDetailsAsync(plane.id));
await Task.WhenAll(tasks.ToArray());
}
並行運行請求的合理數量是多少? 飛機列表可以是0到100個對象,通常最多20個。
它在很大程度上取決於服務器,但我認為沒有最終的答案。 例如,檢查此問題:
就WP8客戶端而言,我相信它可以毫無問題地產生100個並行請求。
我不知道網絡連接的限制是什么,但會有一個。
如果沒有,唯一的問題是用於保持許多請求存活的內存量。
因此,假設底層操作系統將正確處理限制,我會做一些事情:
List<plane> planes = await planeService.getPlanes();
var allDetails = Task.WhenAll(from plane in plains
select planeService.getDetails(plane.id));
foreach(var details in allDetails)
{
drawDetails(details);
}
注意:您應遵循常見的命名約定,以幫助其他人了解您的代碼。 異步方法應該是Async的后綴,而在* C#中 ,方法名稱總是CamelCase。
您應該檢查ServicePoint ,這將為HTTP連接提供連接管理。 ServicePoint對象允許的默認最大並發連接數為2.因此,如果需要增加它,可以使用ServicePointManager.DefaultConnectionLimit屬性 。 只需檢查MSDN中的鏈接,您就可以看到示例。 並設置您需要的值。 這可能對你有幫助..
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.