在代码逻辑中,等待一个标记位的值变化,当值变化或者超时,则立即返回,一种实现方式

在代码逻辑中,等待一个标记位的值变化,当值变化或者超时,则立即返回,一种实现方式

声明一个bool变量,作为标记位:

bool _flag = false;

在一个方法中,我们将该标记位设置为true,然后开始等待其他逻辑将其改为false,或者超时。

            _flag = true;
            await WaitHelper.WaitForFlagAsync(() => _flag, TimeSpan.FromSeconds(10));
            MessageBox.Show("标记位已变化,或者已超时");

方法:

    public class WaitHelper
    {
        public static async Task WaitForFlagAsync(Func<bool> flagChecker, TimeSpan timeout)
        {
            var cts = new CancellationTokenSource(timeout);

            try
            {
                while (flagChecker())
                {
                    if (cts.Token.IsCancellationRequested)
                    {
                        return; // 超时退出
                    }

                    await Task.Delay(100, cts.Token); // 每100毫秒检查一次
                }
            }
            catch (OperationCanceledException)
            {
                // 超时正常退出
            }
        }
    }

 

posted on 2025-07-03 17:56  lopengye  阅读(11)  评论(0)    收藏  举报

导航