Я разработал страницу ASP.NET, которая извлекала данные из CRM 2011. Существует несколько приглашений, и на страницу требуется несколько секунд для загрузки.Разница между WaitAll и Wait
Я думал, что могу использовать некоторый параллелизм, чтобы ускорить процесс.
Это код:
Task[] tasks = new Task[4];
tasks[0] = Task.Run(() =>
{
RetrieveAttributeRequest retrieveFreightTerm = new RetrieveAttributeRequest { };
retrieveFreightTerm.EntityLogicalName = "account";
retrieveFreightTerm.LogicalName = "address1_freighttermscode";
retrieveFreightTerm.MetadataId = Guid.Empty;
retrieveFreightTerm.RetrieveAsIfPublished = true;
RetrieveAttributeResponse retrieveFrieghtTermResponse = (RetrieveAttributeResponse)Service.Execute(retrieveFreightTerm);
PicklistAttributeMetadata retrievedPicklistAttributeMetadata = (PicklistAttributeMetadata)retrieveFrieghtTermResponse.AttributeMetadata;
OptionMetadata[] optionlist = retrievedPicklistAttributeMetadata.OptionSet.Options.ToArray();
if (!IsPostBack)
foreach (OptionMetadata oMD in optionlist)
{
FreightTermDropDownList.Items.Add(new ListItem(oMD.Label.UserLocalizedLabel.Label, oMD.Value.ToString()));
}
});
после задач я использую
Task.WaitAll();
Я отладку коды и извлечение данных, но выпадающие списки пусты в любом случае.
Изменение
Task.WaitAll();
в
tasks[0].Wait(2000);
tasks[1].Wait(2000);
tasks[2].Wait(2000);
tasks[3].Wait(2000);
делает код для работы (у меня есть 4 задачи). В чем разница между двумя вариантами?
Возможно, связано с вашей проблемой, что классы прокси-сервера службы CRM не являются потокобезопасными. Вам нужно убедиться, что каждая задача (или, по крайней мере, каждый поток) имеет свой собственный экземпляр службы организации и/или метаданных, а не все из них используют «Сервис». – shambulator