微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以精确的时间间隔强制执行主循环?

如何解决如何以精确的时间间隔强制执行主循环?

这是 IoT Edge Modbus 模块的简化方案:https://github.com/Azure/iot-edge-modbus 应用程序从 Modbus-TCP 设备轮询一些数据。它创建用于读取寄存器的单独任务。读取按指定的时间间隔执行。
当任务数 > 500 时,“开始”方法中的“While”循环开始挂起。 While 循环内的代码不在 PublishInterval 执行。 应用程序的 SingleOperation 任务越多,执行“While-loop”代码的频率就越低。

如何修改代码以确保 While 循环中的代码准确按时执行(在 PublishInterval 之后)?

static List<Task> m_task_list = new List<Task>();
static bool m_run = true;
static int PublishInterval = 1800000;

static void Main(string[] args)
{
    Init().Wait();
}

static async Task Init()
{
    m_task_list.Add(Start(userContext));
}


static async Task Start(object userContext)
{
    //Creating of 5000+ tasks that poll data (read 1-2 registers) from Modbus-TCP devices. Each task works 24/7 and polls data after some interval (for example: 15min)  
    foreach (var op in Operations)
    {
        Task t = Task.Run(async () => await SingleOperation(op.Params));
        m_taskList.Add(t);
    }

    while (m_run)
    {
        //Compose the read data into Amqp messages and send them to IoT Hub
        Console.WriteLine($"{DateTime.Now} I am alive!");
    
        if (!m_run)
        {
            break;
        }
        await Task.Delay(PublishInterval);      
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。