在代码逻辑中,等待一个标记位的值变化,当值变化或者超时,则立即返回,一种实现方式
在代码逻辑中,等待一个标记位的值变化,当值变化或者超时,则立即返回,一种实现方式
声明一个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) { // 超时正常退出 } } }
浙公网安备 33010602011771号