首页 > 解决方案 > 如何每 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 次所以基本上我正在尝试实现一些重试逻辑(调用一个返回布尔值的函数,尝试多次,如果不成功然后退出)

对此有什么想法吗?

标签: c#

解决方案


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 methodFunc<bool> method. AnAction可以接受零个或多个参数,但它的返回类型必须是void. AFunc有一个返回类型和零个或多个参数。


推荐阅读