Как выполнить взаимосвязанный. Правильно уменьшение/уменьшение в IO связано?

StackOverflow https://stackoverflow.com/questions/20353398

  •  25-08-2022
  •  | 
  •  

Вопрос

У меня есть простое приложение для консоли IO Bound 4.0, которое отправляет 1 к N запросам на веб-сервис и ожидает их завершения, а затем выйдет. Вот образец,

static int counter = 0;
static void Main(string[] args)
{
foreach (my Loop)
{
    ......................
    WebClientHelper.PostDataAsync(... =>
    {

        ................................
        ................................
        Interlocked.Decrement(ref counter);
    });
    Interlocked.Increment(ref counter);
}
    while(counter != 0)
    {
    Thread.Sleep(500);
    }
}

Это правильная реализация?

Это было полезно?

Решение 2

Как предполагает Ганс, вот ваш код реализован с CountdownEvent:

static void Main(string[] args)
{
    var counter = new CountdownEvent();
    foreach (my Loop)
    {
        ......................
        WebClientHelper.PostDataAsync(... =>
        {

            ................................
            ................................
            counter.Signal();
        });
        counter.AddCount();
    }

    counter.Wait();
}

Другие советы

Вы можете использовать задачи. Пусть TPL управляет этими вещами.

Task<T>[] tasks = ...;
//Started the tasks
Task.WaitAll(tasks);

Другой способ - использовать Assockcompletionionsource, как упомянуто здесь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top