0

所有这些代码都在最低级别的类库中。

对于下面的代码块,我应该将整个代码体包装在 a 中Task.Run(()=>{});还是有更好的方法来触发其中的每一个.GroupParts?async Parallel 会在哪里发挥作用?

    public IGroupedParts GroupParts(GroupOption option)
    {
        IGroupedParts gParts = new GroupedParts();

        if (this.Doors.Count > 0) { gParts.Doors = this.Doors.GroupParts(option); }

        if (this.Leafs.Count > 0) { gParts.Leafs = this.Leafs.GroupParts(option); }

        if (this.Sidelites.Count > 0) { gParts.Sidelites = this.Sidelites.GroupParts(option); }

        if (this.Glass.Count > 0) { gParts.Glass = this.Glass.GroupParts(option); }

        if (this.GlassStops.Count > 0) { gParts.GlassStops = this.GlassStops.GroupParts(option); }

        if (this.Horizontals.Count > 0) { gParts.Horizontals =this.Horizontals.GroupParts(option); }

        if (this.Verticals.Count > 0) { gParts.Verticals = this.Verticals.GroupParts(option); }

        if (this.Sills.Count > 0) { gParts.Sills = this.Sills.GroupParts(option); }

        if (this.Midrails.Count > 0) { gParts.Midrails = this.Midrails.GroupParts(option); }

 ...///still more code but omitted

        return gParts;
    }

---这是我所说的用Task.Run(()=>{});

public async Task<IGroupedParts> GroupParts(GroupOption option)
        {
            return await Task.Run(() =>
                {
                    IGroupedParts gParts = new GroupedParts();

                    if (this.Doors.Count > 0) { gParts.Doors = this.Doors.GroupParts(option); }

                    if (this.Leafs.Count > 0) { gParts.Leafs = this.Leafs.GroupParts(option); }

                    if (this.Sidelites.Count > 0) { gParts.Sidelites = this.Sidelites.GroupParts(option); }

                    return gParts;
                });
        }

---我没有并行示例,这就是我寻求帮助的原因...

4

1 回答 1

0

您当前包装整个操作的方式对我来说似乎很好。但是,尚不清楚您是在询问方法,因为这需要大量时间,还是您是否在询问您目前正在做什么。

如果性能是一个问题,您也许可以使用Task.Factory.StartNew/在它们各自的线程池线程上旋转每个单独的操作,Task.Run但取决于机器架构,这可能无法提供任何加速。

您当前拥有的内容不应该锁定 UI,如果性能对您来说是合理的,我认为除了重命名异步方法以包含Async后缀 [相当小的东西之外,没有任何真正需要优化您正在做的事情]

public async Task<IGroupedParts> GroupPartsAsync(GroupOption option){ ... }

我希望这有帮助。

于 2013-06-05T23:28:13.147 回答