2013-06-05 111 views
0

所有這些代碼都位於最低級別的類庫中。我應該實現異步並行還是異步任務

對於下面的代碼塊,我應該換行的代碼整個身體在Task.Run(()=>{});或是否有更好的方式來激發那些.GroupParts的每一個?異步並行會在哪裏發揮作用?

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

每個:00:00:00.0100005 全部:00:00:00.0140008 這是一個頁面,可以放入一組藍圖中。 關於它的事情是,這是一整套頁面進入一卷圖紙可能是15 - 50頁。 此外,這是繪製每個頁面所需的所有信息,每個頁面都是位圖,所以我只是想在任何地方修剪。 –

+0

目前這不是在一個服務器平臺上,這個庫將有它自己的服務器加強。 –

回答

0

你目前包裝整個操作的方式對我來說似乎很好。然而,目前還不清楚你是否在問方法論,因爲這需要花費大量的時間,或者你是否在問你現在在做什麼。

如果性能是一個問題,你也許可以在他們的個人使用Task.Factory.StartNew/Task.Run但根據計算機體系結構,這可能提供不加快什麼,所以有史以來線程池線程自旋每個單獨操作。

什麼,你現在有不應該鎖定用戶界面,如果性能是合理的你,我沒有看到有任何真正需要優化你從CLUDE一個Async重命名你的異步方法來幹什麼分開後綴[漂亮的小東西]

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

我希望這有助於。

+0

好吧,對我來說聽起來不錯,因爲如果我打包每個電話,我會生成一堆代碼來覆蓋,這很可能會讓它變慢。我只是想問一些我感受到的東西。謝謝您的幫助。 –