public async Task DiscoveryAsync(CancellationToken ct, IPAddress interfaceAddress)
        {
            IPEndPoint interfaceEndpoint = new IPEndPoint(interfaceAddress, 2048);
            var        udpClient         = new BroadcastUdpClient(interfaceEndpoint);
            //udpClient.EnableBroadcast = true;
            await udpClient.SendAsync(_Datagram, _Datagram.Length, _EP2);

            udpClient.EnableBroadcast = false;
            ct.Register(() => udpClient.Close());

            HashSet <ulong> packetHash = new HashSet <ulong>();

            while (!ct.IsCancellationRequested)
            {
                UdpReceiveResult receiveResult;

                try
                {
                    receiveResult = await udpClient.ReceiveAsync();
                }
                catch (ObjectDisposedException)
                {
                    break;
                }

                DiscoveryPacket dpack  = new DiscoveryPacket(receiveResult.Buffer);
                Device          device = dpack.DecodePacket();

                Boolean result = packetHash.Add(Utils.CalculateHash(receiveResult.Buffer));

                if (result)
                {
                    OnDeviceDiscovered(device);
                }
            }

            udpClient.Close();
            packetHash.Clear();
        }
        public async Task DiscoveryAsync(CancellationToken ct)
        {
            var udpClient = new UdpClient(_EP1);

            udpClient.EnableBroadcast = true;
            await udpClient.SendAsync(_Datagram, _Datagram.Length, _EP2);

            udpClient.EnableBroadcast = false;
            ct.Register(() => udpClient.Close());


            while (!ct.IsCancellationRequested)
            {
                UdpReceiveResult receiveResult;

                try
                {
                    receiveResult = await udpClient.ReceiveAsync();
                }
                catch (ObjectDisposedException)
                {
                    break;
                }

                DiscoveryPacket dpack  = new DiscoveryPacket(receiveResult.Buffer);
                Device          device = dpack.DecodePacket();

                Boolean result = _PacketHash.Add(Utils.CalculateHash(receiveResult.Buffer));

                if (result)
                {
                    OnDeviceDiscovered(device);
                }
            }

            udpClient.Close();
            _PacketHash.Clear();
        }