所有这些代码都位于最低级别的类库中。
对于下面的代码块,我应该将整个代码包裹在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;
});
}
---我没有并行示例,这就是我寻求帮助的原因......
答案 0 :(得分:0)
你目前包装整个操作的方式对我来说似乎很好。但是,目前尚不清楚您是否在询问方法论,因为这需要花费大量时间,或者您是否在询问您目前正在做什么。
如果性能有问题,您可以使用Task.Factory.StartNew
/ Task.Run
在其各自的线程池线程上旋转每个单独的操作,但根据机器架构,这可能无法提供速度永远都是如此。
您目前拥有的内容不应该锁定用户界面,如果您的表现合理,我不会发现除了重新命名您的异步方法以外,还没有真正需要优化您正在做的事情。 1}}后缀[漂亮的小东西]
Async
我希望这会有所帮助。