如何加速WPF中的异步功能

时间:2017-06-19 10:53:39

标签: c# wpf asynchronous

我在库中创建了这个函数。我将此功能用于控制台和WPF应用程序。在我的控制台应用程序中,此功能在不到一秒的时间内完成,最多可收集80个项目和小型集合,例如5.

此外,在我的WPF应用程序中,当我运行此函数时,项目集合最多为80,需要一分钟才能完成执行,但最多5项的项目在不到一秒的时间内完成执行。

C#代码:

<clinit>

1 个答案:

答案 0 :(得分:0)

正如我的评论中所提到的,如果你想加快这些工作的处理速度,你肯定可以在循环上做一些工作,让逻辑与所有模板名称并行应用。

public async Task<Dictionary<string, string[]>> GetTemplates(string showName)
{
    Dictionary<string, string[]> d = new Dictionary<string, string[]>();

    // Get element collection uri of show "DemoShow"
    var elementCollectionUri = GetElementCollectionUri(vizServiceDocURL, showName);

    var templateCollectionUri = GetTemplateCollectionUri(elementCollectionUri);

    var templateNames = GetListOfTemplateName(templateCollectionUri);

    //get the name and links from each show and add them to the dictionary
    // Keep a temporary List of Tasks
    List<Task> allTasks = new List<Task>();
    foreach (string templateName in templateNames)
    {
        string localTemplateName = templateName;
        // Apply our logic and add to our Dictionary in a task
        Task jobTask = Task.Run(() => 
        {
            var templateCollectionEntryUri = GetTemplateCollectionEntryUri(templateCollectionUri, localTemplateName);

            var elementModelUri = GetTemplateElementModelUri(templateCollectionUri, localTemplateName);

            string[] links = new string[2] { templateCollectionEntryUri, elementModelUri };
            d.Add(localTemplateName, links);
        });

        // Add the task to our temp collection
        allTasks.Add(jobTask);
    }

    // Wait for all tasks to finish, WhenAll is non-blocking unlike WaitAll.
    await Task.WhenAll(allTasks);

    return d;
}