Autor Beitrag
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Mo 17.06.13 14:00 
Hallo Freunde,

ich beiße mich gerade durch den Guide "Parallel Programming with .NET" in der MSDN durch. So weit klingt das ja ganz simpel, bis auf eine Geschichte.

Gleich zu Beginn geht es um parallele Schleifen. Ein simples Beispiel wäre:

ausblenden C#-Quelltext
1:
2:
3:
4:
for (int i=0; i < n; i++)
{
  BlockVar[i]++;
}


Um das zu parallelisieren, soll ich aus dem Schleifenkörper einen Lamda-Ausdruck machen. Etwa so:
ausblenden C#-Quelltext
1:
2:
3:
4:
Parallel.for(0,n,i =>
{
   //Do something useful here
}


Sähe dann mein Code so aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
Parallel.for(0, n, i =>
{
  BlockVar[i]++;
}


?

Ich gestehe, das ganze Zeug mit Lamdba-Ausdrücken habe ich nie verstanden, wohl aus Ermangelung eines wirklich brauchbaren Tutorials...

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 17.06.13 14:36 
Hallo,

dein Code ist fast richtig:
ausblenden C#-Quelltext
1:
2:
3:
4:
Parallel.For(0, n, i =>
{
  BlockVar[i]++;
});

For ist dabei eine statische Methode der Parallel-Klasse.

Und zum Thema Lambda-Ausdruck verweise ich dich mal auf meinen Beitrag in Delegaten und Lambda-Ausdrücke.

Für diesen Beitrag haben gedankt: OlafSt
OlafSt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Mo 17.06.13 15:50 
Nachdem ich das alles mal studiert habe:

Lambda-Ausdrücke sind also im wesentlichen nur eine Möglichkeit, anonyme Methoden in Kurzform darzustellen ?
Und anonyme Methoden wiederum sind im wesentlichen eine Möglichkeit, seine "Utils.cs" (also die Quelltextdatei mit all den kleinen, nirgendwohin passenden Hilfsroutinen) kurz zu halten - sprich, sich Tipparbeit zu sparen ?

Ich erkenne das gewaltige Potential, sein Programm sehr kompakt zu formulieren - und es gleichzeitig ungeheuer unlesbar zu gestalten :D

Demontieren wir unser Parallels.For-Beispiel - nur zum Verständnis :wink:
ausblenden C#-Quelltext
1:
2:
3:
4:
Parallel.For(0, n, i =>
{
  BlockVar[i]++;
});


Den Lambda formulieren wir aus, in Form einer anonymen Methode:
ausblenden C#-Quelltext
1:
Parallel.For(0,n, delegate (int i) {BlockVar[i]++;});					


Die anonyme Methode formulieren wir nun auch komplett aus:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
delegate void Operation(int i);

void AddOne(int Index)
{
   BlockVar[Index]++;
}

Operation op=this.AddOne;
Parallel.For(0,n,op);


Habe ich das so in etwa richtig begriffen ?

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Mo 17.06.13 16:39 
Ja, exakt :zustimm:
OlafSt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Do 20.06.13 13:50 
Sorry fürs späte antworten, aber 40 Fieber hauen mich nun mal immer um - besonders, wenn draußen als Bonus noch 32 Grad herrschen ;)

Summa summarum: Dann habe ich das Zeug jetzt verstanden. Gutes Tutorial !

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.