protected override async Task GetValueAsync(SortedDictionary <string, string> ret, RefInt nextPollingInterval, CancellationToken cancel = default)
    {
        SnmpWorkSettings settings = Host.Settings;

        if (settings.SpeedTargets._IsSamei("none") || settings.SpeedTargets._IsSamei("null"))
        {
            return;
        }

        string[] speedTargets = settings.SpeedTargets._Split(StringSplitOptions.RemoveEmptyEntries, ",");

        count++;


        foreach (string target in speedTargets)
        {
            ParseTargetString(target, out string hostnameAndPort, out string alias);

            cancel.ThrowIfCancellationRequested();

            string[] tokens = hostnameAndPort._Split(StringSplitOptions.RemoveEmptyEntries, '|');
            string   host;
            int      port = 9821;
            host = tokens[0];
            if (tokens.Length >= 2)
            {
                port = tokens[1]._ToInt();
            }

            //long downloadBps_1 = 0;
            //long uploadBps_1 = 0;
            long downloadBps_32 = 0;
            long uploadBps_32   = 0;

            int intervalBetween = settings.SpeedIntervalsSec * 1000;
            if (count <= 1)
            {
                intervalBetween = 0;
            }

            int numTry = settings.SpeedTryCount;
            if (count <= 1)
            {
                numTry = 1;
            }

            int span = settings.SpeedSpanSec * 1000;
            if (count <= 1)
            {
                span = 2000;
            }

            try
            {
                IPAddress ipAddress = await LocalNet.GetIpAsync(host, cancel : cancel);

                try
                {
                    var downloadResult_32 = await SpeedTestClient.RunSpeedTestWithMultiTryAsync(LocalNet, ipAddress, port, 32, span, SpeedTestModeFlag.Download, numTry, intervalBetween, cancel);

                    downloadBps_32 = downloadResult_32.Select(x => x.BpsDownload).OrderByDescending(x => x).FirstOrDefault();
                }
                catch (Exception ex)
                {
                    ex._Debug();
                }
                try
                {
                    var uploadResult_32 = await SpeedTestClient.RunSpeedTestWithMultiTryAsync(LocalNet, ipAddress, port, 32, span, SpeedTestModeFlag.Upload, numTry, intervalBetween, cancel);

                    uploadBps_32 = uploadResult_32.Select(x => x.BpsUpload).OrderByDescending(x => x).FirstOrDefault();
                }
                catch (Exception ex)
                {
                    ex._Debug();
                }


                //try
                //{
                //    var downloadResult_1 = await SpeedTestClient.RunSpeedTestWithMultiTryAsync(LocalNet, ipAddress, port, 1, span, SpeedTestModeFlag.Download, numTry, intervalBetween, cancel);

                //    downloadBps_1 = downloadResult_1.Select(x => x.BpsDownload).OrderByDescending(x => x).FirstOrDefault();
                //}
                //catch (Exception ex)
                //{
                //    ex._Debug();
                //}


                //try
                //{
                //    var uploadResult_1 = await SpeedTestClient.RunSpeedTestWithMultiTryAsync(LocalNet, ipAddress, port, 1, span, SpeedTestModeFlag.Upload, numTry, intervalBetween, cancel);

                //    uploadBps_1 = uploadResult_1.Select(x => x.BpsUpload).OrderByDescending(x => x).FirstOrDefault();
                //}
                //catch (Exception ex)
                //{
                //    ex._Debug();
                //}
            }
            catch (Exception ex)
            {
                ex._Debug();
            }

            ret.TryAdd($"{alias} - RX (Mbps)", ((double)downloadBps_32 / 1000.0 / 1000.0).ToString("F3"));
            ret.TryAdd($"{alias} - TX (Mbps)", ((double)uploadBps_32 / 1000.0 / 1000.0).ToString("F3"));

            //ret.TryAdd($"{alias} - 01_RX (Mbps)", ((double)downloadBps_1 / 1000.0 / 1000.0).ToString("F3"));
            //ret.TryAdd($"{alias} - 01_TX (Mbps)", ((double)uploadBps_1 / 1000.0 / 1000.0).ToString("F3"));
        }
    }