gpt4 book ai didi

c# - 在 C# 中使用超时的通用尝试和重试?

转载 作者:太空狗 更新时间:2023-10-29 22:10:16 26 4
gpt4 key购买 nike

我正在寻找通用的 C# 超时重试。基本上,我想要以下内容:

bool stopTrying = false;
DateTime time = DateTime.Now;
while (!stopTrying)
{
try
{
//[Statement to Execute]
}
catch (Exception ex)
{
if (DateTime.Now.Subtract(time).Milliseconds > 10000)
{
stopTrying = true;
throw ex;
}
}
}

在上面的例子中,我等待了 10 秒,但它应该是一个基于参数的可变超时。我不想在任何需要使用它的地方重复这个完整的代码。我的代码中有多个地方没有内置到 API 中的超时,如果应用程序尚未准备好执行语句,我将触发异常。这也可以避免在这些语句之前在我的应用程序中对延迟进行硬编码。

澄清:所讨论的语句可能类似于赋值。如果我使用委托(delegate)和 method.Invoke,调用的范围是否在委托(delegate)内而不是原始方法内?

最佳答案

使用您的示例,解决方案很简单:

bool DoOrTimeout<T>(T method, TimeSpan timeout) where T : delegate // FIXME
{
bool stopTrying = false;
DateTime time = DateTime.Now;
while (!stopTrying)
{
try
{
method.Invoke();
stopTrying = true;
}
catch (Exception ex)
{
if (DateTime.Now.Subtract(time).Milliseconds > timeout.TotalMilliseconds)
{
stopTrying = true;
throw;
}
}
}
}

只需调用 DoOrTimeout 并将委托(delegate)作为第一个参数。

关于c# - 在 C# 中使用超时的通用尝试和重试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/715647/

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