UDP asyn c - зачем создавать новый UdpClient - PullRequest
0 голосов
/ 24 февраля 2020
class UdpExample
{
    private UdpClient Client = new UdpClient(25971);

    public UdpExample()
    {
        Client.BeginReceive(DataReceived, Client);
    }

    private void DataReceived(IAsyncResult ar)
    {
        UdpClient c = (UdpClient)ar.AsyncState
        IpEndPoint receivedIpEndPoint = new IpEndPoint(IpAddress.Any, 0);
        Byte[] data = c.EndReceive(ar, ref receivedIpEndPoint);
    }
}

В приведенном выше коде, почему новый UdpClient (c) сделан из ar.AsyncState? Почему он не может просто использовать Client.EndReceive (используя класс UdpClient)

1 Ответ

3 голосов
/ 24 февраля 2020

ar.AsyncState - это object, это не новый UdpClient, а тот, который вы передали в .

Почему? Потому что, если у вас много таких вещей, вы знаете, над какой из них вы работаете, однако это может быть использовано не только для UdpClient, вы можете передать что угодно, и с уверенностью знаете, что оно принадлежит Begin вы начали с.

Давайте рассмотрим параметр в документации

state Object - Пользовательский объект, который содержит информацию об операции приема , Этот объект передается делегату requestCallback после завершения операции.

...