0

我开发了一个从 CRM 2011 检索数据的 ASP.NET 页面。有几个调用,页面需要几秒钟才能加载。

我想我可能会使用一些并行性来加快速度。

这是代码:

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 个任务)。这两个选项有什么区别?

4

1 回答 1

3

您需要将tasks数组传递给WaitAll()方法:

Task.WaitAll(tasks);

WaitAll()和之间的区别在于Wait()Wait()它用于等待特定任务(Wait()被调用的实例)WaitAll()的完成,并等待作为参数给出的所有任务的完成。

同样,为了WaitAll()工作,您需要传递您正在等待的实际任务。

于 2013-10-10T08:55:28.007 回答