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

我认为差异通常不会很大,但如果我希望传入流中的暂停,我更喜欢完整的异步方法(开始.../结束...),以便可以将回调卸载几层而不是要求额外的线程。异步方法的另一个优点是您始终可以获取所需的数据,将另一个异步获取排队,然后在现有异步线程上处理新数据,从而提供更多并行选项(一次读取,一次处理)。当然,这也可以手动完成(可能使用工作队列)。

你当然可以简介...

于 2011-04-19T15:26:33.367 回答