【问题标题】:Task wait problem while waiting a request等待请求时的任务等待问题
【发布时间】:2019-07-26 20:02:35
【问题描述】:

我是 C# 新手,我正在尝试理解任务逻辑。

我等待打开 LED 灯泡的设备的响应。我想等到灯泡标志变为真,然后对其进行序列化。

1)我在这里检查了很多问题,其中大多数使用任务数组,但我只有一个任务。我找到了this 问题并应用了相同的逻辑,但是,我的任务什么也没做。

2) 最重要的是,我在附近放置了断点: m_Condition.Set();m_Condition.Set();,似乎编译器甚至没有看到任务,它们没有任何价值。但是,led 为 ON(意味着 light_flag 为真)但是当我在序列化 light_flag 之前和之后打印时看起来是假的。我无法抓住它是真的那一刻。

3) 另外,我尝试创建一个线程而不是 Task,但是当它变为 true 时我无法捕获该值。

我卡住了,你能告诉我路吗?

    ManualResetEventSlim m_Condition = new ManualResetEventSlim(false);

    public bool Condition {
        get {
            return m_Condition.IsSet;
        }
        set {
            if (!obj.light_flag) m_Condition.Set();
            else m_Condition.Reset();
        }
    }

    private void chk_Test1_CheckedChanged(object sender, EventArgs e) {

        if (chk_Test1.Checked == true) SendMsg("light_flag");

        Task myTask = Task.Run(() = >{
            m_Condition.Wait();

            Serialize();

        });

    }

    void Serialize() {
        string json = JsonConvert.SerializeObject(obj, Formatting.Indented);
        File.WriteAllText(path_combined, json);

}

【问题讨论】:

    标签: c# task


    【解决方案1】:

    我用线程解决了这个问题,我在将消息发送到设备之前给出了线程的开始。这样它就不会错过消息(当 light_flag 返回 true 时)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 2014-09-06
      • 2016-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多