質問

シンプルなIOバウンド4.0コンソールアプリケーションがあります。これにより、1からNリクエストをWebサービスに送信し、完了してから終了するのを待ちます。これがサンプルです、

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

Hansが示唆したように、ここにあなたのコードが実装されています 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);

別の方法は使用することです ここで述べたように、taskcompletionsource.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top