public void PollingTask()
        {
            Task.Run(() =>
            {
                if (Monitor.TryEnter(PollingLock))
                {
                    Console.WriteLine("Select Method:\n(I):Indication (C) :Confirm (Q) :Quit");
                    string lineRead = Console.ReadLine();
                    switch (lineRead.ToLower()[0])
                    {
                    case 'i':
                        DataLinkLayerPrimitives.L_Data.Indication indication = new DataLinkLayerPrimitives.L_Data.Indication();
                        Console.WriteLine("Input Id");
                        lineRead = Console.ReadLine();
                        indication.Identifier = uint.Parse(lineRead, NumberStyles.HexNumber);
                        Console.WriteLine("Input Id");
                        lineRead = Console.ReadLine();
                        indication.Identifier = uint.Parse(lineRead, NumberStyles.HexNumber);
                        this.IndicationEvent?.Invoke(indication);
                        break;

                    case 'c':
                        Monitor.Enter(ConfirmLocker);
                        DataLinkLayerPrimitives.L_Data.Confirm confirmInfo = new DataLinkLayerPrimitives.L_Data.Confirm()
                        {
                            TransferStatus = DataLinkLayerEnums.TransferStatusEnum.Complete
                        };
                        Console.WriteLine("Is Success?Y:N");
                        lineRead = Console.ReadLine();
                        if (lineRead.Equals("N"))
                        {
                            confirmInfo.TransferStatus = DataLinkLayerEnums.TransferStatusEnum.Not_Complete;
                        }
                        Console.WriteLine("Input Id");
                        lineRead = Console.ReadLine();
                        confirmInfo.Identifier = uint.Parse(lineRead, NumberStyles.HexNumber);
                        this.ConfirmEvent?.Invoke(confirmInfo);
                        Monitor.Exit(ConfirmLocker);
                        break;
                    }
                    Monitor.Exit(PollingLock);
                }
            });
        }
        public void Request(DataLinkLayer.DataLinkLayerPrimitives.L_Data.Request l_Pdu, ConfirmDelegate confirmCallback)
        {
            if (l_Pdu.DLC == 0)
            {
                return;
            }
            DataLinkLayerPrimitives.L_Data.Confirm confirmInfo = new DataLinkLayerPrimitives.L_Data.Confirm()
            {
                Identifier     = l_Pdu.Identifier,
                TransferStatus = DataLinkLayerEnums.TransferStatusEnum.Complete
            };
            //StartListener
            void lisenter(DataLinkLayer.DataLinkLayerPrimitives.L_Data.Confirm confirm_Pdu)
            {
                if (confirm_Pdu.Identifier.Equals(l_Pdu.Identifier))
                {
                    confirmInfo = confirm_Pdu;
                }
            }

            ConfirmEvent += lisenter;
            Console.WriteLine($"DataId:0x{l_Pdu.Identifier:X}\tDLC:{l_Pdu.DLC}\tData:{ string.Join(" ", l_Pdu.Data.Take((int)l_Pdu.DLC).Select(ele => ele.ToString("X2")))}");
            this.RequestEvent?.Invoke(l_Pdu);
            if (Monitor.TryEnter(ConfirmLocker))
            {
                this.ConfirmEvent?.Invoke(confirmInfo);
                confirmCallback(confirmInfo);
            }
            else
            {
                Monitor.Enter(ConfirmLocker);
                confirmCallback(confirmInfo);
            }
            Monitor.Exit(ConfirmLocker);
            ConfirmEvent -= lisenter;
        }