여전히 경우에도, BroadcastBlock을 다음 ActionBlock 그것이 BoundedCapacity 1 제한의 요구 사항을 이해하는 것이 중요하다 또는 브로드 캐스트 블록의 모든 메시지를 저장하고 처리 할 것 실행 중.
코드 예제는 여기 간다 :
ActionBlock<int> ExecuteBlock = new ActionBlock<int>(async ThisNumber =>
{
await Task.Delay(100);
Console.WriteLine($">{ThisNumber}");
}, new ExecutionDataflowBlockOptions { BoundedCapacity = 1 });
BroadcastBlock<int> ThrottleBlock = new BroadcastBlock<int>(null);
ThrottleBlock.LinkTo(ExecuteBlock, new DataflowLinkOptions { PropagateCompletion = true });
for(int IX = 0; IX < 128; IX++)
{
await ThrottleBlock.SendAsync(IX);
await Task.Delay(10);
}
이것은 다음과 같은 결과 :
>0
>6
>12
>20
>27
>34
>41
>48
>55
>62
>68
>75
>82
>88
>95
>101
>108
>115
>122
>127
즐기십시오!
- 시몬
나는이 게시물을 잠시 후에 게시했지만 이후 내 자신의 라이브러리를 만들었습니다. 내 Kts.ActorsLite 라이브러리에 "가장 최근의"작업 큐가 있습니다. https://github.com/BrannonKing/Kts.ActorsLite – Brannon