等待请求时任务等待问题

时间:2019-07-26 11:37:50

标签: c# task

我是C#的新手,我想了解Task的逻辑。

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

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

2)最重要的是,我在附近放置了断点: m_Condition.Set();m_Condition.Set();,似乎编译器甚至看不到Task,它们没有任何价值。但是, led为开(表示light_flag为true),但是当我在序列化之前和之后进行打印时,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);

}

1 个答案:

答案 0 :(得分:1)

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