2011-08-22 5 views
8

Parallel.Forループでステップサイズを指定できるオーバーロードがあるかどうか分かりますか? C#またはVB.Netのサンプルは素晴らしいでしょう。Parallel.Forステップサイズ

「enumerable.range工程」のおかげで、ゴンサロ

答えて

15

Googleとあなたは、階段の範囲を提供Enumerable.Rangeの代替実装時に来ることができるはずです。 「イールド・リターン」は1にheebieのjeebiesを与えた場合、あなたは常にだけでできる代わり

public static class BetterEnumerable { 
    public static IEnumerable<int> SteppedRange(int fromInclusive, int toExclusive, int step) { 
     for (var i = fromInclusive; i < toExclusive; i += step) { 
      yield return i; 
     } 
    } 
} 

:次に、あなたは、Googleが機能していない場合は、実装は次のようなものでなければなりません

Parallel.ForEach(BetterEnumerable.SteppedRange(fromInclusive, toExclusive, step), ...) 

を単に行うことができます次の場所に正規の古いリストを作成してください。

var list = new List<int>(); 
for (int i = fromInclusive; i < toExclusive; i += step) { 
    list.Add(i); 
} 
Parallel.ForEach(list, ...); 

これは、必要条件であれば簡単にVBに変換する必要があります。

+0

ありがとうDax。私がVB.Netでこれをやろうとしているのであれば、余分な作業が必要でしょうか? – Gonzalo

+0

VBの経験はありませんが、forループを使用して必要な整数でList Of Integerを作成し、そのリストで 'Parallel.ForEach'を使用することができます。 –

+0

@Gonzalo:[async CTP](http://www.microsoft.com/download/en/details.aspx?id=22388)では、VB.NETでイテレータを使用できます。 – jason

関連する問題