gpt4 book ai didi

c# - .net 构造 for while 循环超时

转载 作者:IT王子 更新时间:2023-10-29 04:36:49 28 4
gpt4 key购买 nike

我通常使用 while 循环来继续尝试某些操作,直到操作成功或超时结束:

bool success = false
int elapsed = 0
while( ( !success ) && ( elapsed < 10000 ) )
{
Thread.sleep( 1000 );
elapsed += 1000;
success = ... some operation ...
}

我知道有几种方法可以实现这一点,但基本要点是我反复尝试一些 sleep 操作直到成功,或者我睡得太久了。

是否有一个内置的 .net 类/方法/等来避免我到处重写这个模式?也许输入是一个 Func(of bool) 和超时?

编辑
感谢所有贡献者。我选择了 sleep() 方法,因为它最不复杂,而且我完全反对复杂性 =) 这是我的(仍然需要测试的)实现:

 public static bool RetryUntilSuccessOrTimeout( Func<bool> task , TimeSpan timeout , TimeSpan pause )
{

if ( pause.TotalMilliseconds < 0 )
{
throw new ArgumentException( "pause must be >= 0 milliseconds" );
}
var stopwatch = Stopwatch.StartNew();
do
{
if ( task() ) { return true; }
Thread.Sleep( ( int )pause.TotalMilliseconds );
}
while ( stopwatch.Elapsed < timeout );
return false;
}

最佳答案

您可以使用 SpinWait.SpinUntil

参见 https://msdn.microsoft.com/en-us/library/dd449238(v=vs.110).aspx

bool spinUntil = System.Threading.SpinWait.SpinUntil(() => job.IsDisposed, TimeSpan.FromSeconds(5));

关于c# - .net 构造 for while 循环超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6629219/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com