3

本質的に、明白なことを超えてこれらの違いは何ですか?どのフォームをいつ使用する必要がありますか?

class What
{
    public Go()
    {
        Thread thread = new Thread(new ThreadStart(Go2));
        thread.Background = true;
        thread.Start();
    }
    private Go2()
    {
        using UdpClient client = new UdpClient(blabla)
        {
            while (stuff)
            {
                client.Receive(guh);
                DoStuff(guh);
            }
        }
    }
}

class Whut
{
    UdpClient client;
    public Go()
    {
        client = new UdpClient(blabla);
        client.BeginReceive(guh, new AsyncCallback(Go2), null);
    }
    private Go2(IAsyncResult ar)
    {
        client.EndReceive(guh, ar);
        DoStuff(guh);
        if (stuff) client.BeginReceive(guh, new AsyncCallback(Go2), null);
        else client.Close();
    }
}
4

1 に答える 1

4

通常、違いはそれほど大きくないと思いますが、コールバックを数層オフロードできるように、着信ストリームで一時停止が予想される場合は、完全な非同期アプローチ(Begin ... / End ...)をお勧めします。追加のスレッドを要求するのではなく。非同期アプローチのもう1つの利点は、必要なデータを常に取得し、別の非同期フェッチをキューに入れてから、既存の非同期スレッドで新しいデータを処理できることです。これにより、並列処理のオプションがさらにいくつか提供されます(1回の読み取り、1回の処理)。もちろん、これは手動で行うこともできます(おそらくワークキューを使用して)。

もちろんプロフィールを作成することもできます...

于 2011-04-19T15:26:33.367 に答える