dotnet / dotNext

Next generation API for .NET
https://dotnet.github.io/dotNext/
MIT License
1.56k stars 119 forks source link

`AsyncBarrier.AddParticipant()` does not work #205

Closed adienakhmad closed 7 months ago

adienakhmad commented 7 months ago

This snippet

// initialize with 2 participant
using var barrier = new AsyncBarrier(2);

var task1 = Task.Run(async () =>
{
    await barrier.SignalAndWaitAsync();
    Console.WriteLine(barrier.ParticipantsRemaining);
    return -42;
});

var task2 = Task.Run(async () =>
{
    await barrier.SignalAndWaitAsync();
    Console.WriteLine(barrier.ParticipantsRemaining);
    return 42;
});

var result = await Task.WhenAll(task1, task2);

will print:

2
2

while this one

// initialize with 1 participant and call AddParticipant after
using var barrier = new AsyncBarrier(1);
barrier.AddParticipant();

var task1 = Task.Run(async () =>
{
    await barrier.SignalAndWaitAsync();
    Console.WriteLine(barrier.ParticipantsRemaining);
    return -42;
});

var task2 = Task.Run(async () =>
{
    await barrier.SignalAndWaitAsync();
    Console.WriteLine(barrier.ParticipantsRemaining);
    return 42;
});

var result = await Task.WhenAll(task1, task2);

will print

1
1

I'm expecting the second snippet to behave like the first one. I'm using version 4.14.2 from Nuget