Я пытаюсь использовать Microsoft Project OData, запрашивая данные на C#. У меня проблемы с производительностью с задержками около 1 с для каждого запроса. Я пытаюсь запросить 2 информации одновременно, используя этот метод:
public static async Task<string> ReadXml(string url)
{
var request = (HttpWebRequest)WebRequest.Create(url);
request.Credentials = Credentials; // SharePointOnlineCredentials
request.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
using (var response = (HttpWebResponse)await request.GetResponseAsync())
using (var stream = response.GetResponseStream())
using (var reader = new System.IO.StreamReader(stream))
{
var xml = await reader.ReadToEndAsync();
return xml;
}
}
Он отлично работает, если я вызываю его и всегда жду его завершения, прежде чем вызывать его снова, но я никогда не получаю никакого ответа от WebRequest, если я вызываю его несколько раз одновременно:
// just an example. I usually put a condition to filter for the tasks of a single project
var query1 = ReadXml(@"https://something.sharepoint.com/sites/pwa/_api/ProjectData/Projects");
var query2 = ReadXml(@"https://something.sharepoint.com/sites/pwa/_api/ProjectData/Tasks");
Task.WaitAll(query1, query2);
Если я «жду» первого, а затем делаю второй, он работает нормально, но не с кодом выше. И это при условии, что в проекте ‹ 300 задач, если больше, я должен запрашивать их порциями по 300, что приводит к 4 или 5 секундам для всего запроса, поскольку я не могу выполнить их все сразу! Есть ли способ отправить несколько запросов одновременно? Я могу сделать это, просто введя URL-адрес на нескольких вкладках Chrome очень быстро / получая более быстрые ответы. Я не понимаю, почему это не работает с моим кодом!
Спасибо,