2014-10-27 9 views
6

Enthält das Limit BoundedCapacity nur Elemente in der Eingabewarteschlange, die auf die Verarbeitung warten, oder zählt es auch Elemente, die gerade verarbeitet werden?Beinhaltet BoundedCapacity Elemente, die gerade in TPL Dataflow verarbeitet werden?

Hier können zum Beispiel nehmen diese ActionBlock:

var block = new ActionBlock<int>(
    i => Console.WriteLine(i), 
    new ExecutionDataflowBlockOptions 
    { 
     BoundedCapacity = 1000, 
     MaxDegreeOfParallelism = 10, 
    }); 

Wenn es zur Zeit 5 Elemente werden parallel verarbeitet. Bedeutet das, dass die Eingangswarteschlange 1000 Elemente mehr oben von diesen oder nur 995 halten kann?

Antwort

7

Offensichtlich enthält BoundedCapacity tatsächlich die Elemente, die über den Elementen verarbeitet werden, die in der Eingabewarteschlange warten. Dies kann leicht mit einem ActionBlock gezeigt, dass die gleichen ExecutionDataflowBlockOptions mit einem action hat, die niemals endet:

var block = new ActionBlock<int>(
    _ => Task.Delay(-1), 
    new ExecutionDataflowBlockOptions 
    { 
     BoundedCapacity = 1000, 
     MaxDegreeOfParallelism = 10, 
    }); 

for (int i = 0; i < 1001; i++) 
{ 
    Console.WriteLine("#{0} - InputCount={1}", i, block.InputCount); 
    await block.SendAsync(i); 
} 

Die Ausgabe würde wie folgt aussehen und dann würde die Anwendung blockiert unbegrenzt:

... 
... 
#990 - InputCount=980 
#991 - InputCount=981 
#992 - InputCount=982 
#993 - InputCount=983 
#994 - InputCount=984 
#995 - InputCount=985 
#996 - InputCount=986 
#997 - InputCount=987 
#998 - InputCount=988 
#999 - InputCount=989 
#1000 - InputCount=990 

Das liegt daran, 1000 Elemente wurden hinzugefügt, 10 von ihnen (MaxDegreeOfParallelism) werden gleichzeitig verarbeitet, die anderen 990 warten in der Eingangswarteschlange und der 1001 st Artikel konnte nie eindringen.

+1

BoundedCapacity ist also eine Obergrenze für den maximalen DOP. – usr

+0

@usr genau. [This] (http://stackoverflow.com/q/26577051/885318) ist, wie ich zu dieser Frage gekommen bin. – i3arnon

+0

Vielen Dank, sehr hilfreich. –

Verwandte Themen