c# - 如何每 2 秒调用 10 次函数并在返回 true 时退出?
问题描述
我正在使用以下内容,目前仅用于测试
public bool Retry(int numberOfRetries, Action method)
{
if (numberOfRetries > 0)
{
try
{
method();
return true;
}
catch (Exception e)
{
LogException(e);
Thread.Sleep(2000);
// retry
return Retry(--numberOfRetries, method);
}
}
return false;
}
public void showMessage()
{
bool result = false;
//result = true;
if (result)
{
MessageBox.Show("reached ", "reached", MessageBoxButtons.OKCancel);
result = true;
}
return result;
}
我通过以下方式调用它:
private void button4_Click(object sender, EventArgs e)
{
Retry(10, showMessage);
}
但是它在 button4_Click 事件中说 showMessage 是错误的返回类型?我想要做的是每 2 秒调用一次函数 showMessage 10 次,一旦它是真的退出。我已经强迫它为假,因为我正在调试并且希望看到它实际上每 2 秒调用它 10 次所以基本上我正在尝试实现一些重试逻辑(调用一个返回布尔值的函数,尝试多次,如果不成功然后退出)
对此有什么想法吗?
解决方案
showMessage
您的方法的返回类型是void
,但您试图返回一个bool
. 相反,使用public bool showMessage()
. 定义为的方法void
不能返回任何内容。
要注意的另一件事是,您永远不会到达您的catch
块以重试,因为您的代码中没有任何内容引发异常。因此Retry
只会执行一次,它会返回true
。相反,try
可能会是这样的:
try
{
var result = method();
if (!result)
{
throw new Exception("method returned false");
}
return true; // Executes only if method() returns true
}
编辑:
您还需要更改Action method
为Func<bool> method
. AnAction
可以接受零个或多个参数,但它的返回类型必须是void
. AFunc
有一个返回类型和零个或多个参数。
推荐阅读
- r - 从 grid.arrange 中删除 textGrob 的空白
- ajv - 使用 AJV 强制时刻/日期字符串
- python - pyqt5。运行字符串和时钟
- angular - 如何测试“管道”操作的结果是否为“未定义”。TypeError:无法读取未定义的属性“订阅”
- oracle - 如何在单行中显示所有记录
- templates - 可以在节头中包含在包含文件中定义的样式类和脚本函数,该文件包含在另一个包含文件中
- amazon-web-services - 如何在 Xamarin 应用程序中集成 AWS Lex 聊天机器人?
- python - 在 python 3.7.4 中打开大约 1.5GB 的大型 Zip 文件时出现 MemoryError
- c++ - 使用聚合初始化模拟默认函数参数是否有任何陷阱?
- angular - 在角度打字稿和 html 中将单个值设置为选定的多个文本字段