C# 如何在.NET 4.0中重试任务?

C# 如何在.NET 4.0中重试任务?,c#,.net,c#-4.0,concurrency,task-parallel-library,C#,.net,C# 4.0,Concurrency,Task Parallel Library,在任务中出现异常时,根据用户输入多次重试任务的问题提供了C 5.0中的代码 我不熟悉.NETAsync,等待使用.NET4.0的构造在C4.0中整合代码时遇到困难。其他答案也包含谜题 你能给我一个完整的C4.0源代码,例如示例,如何在C中重试一个任务,包括异常处理和允许取消而不需要重试吗 如果我正确理解了您的问题,您要求的解决方案与中建议的类似。这里,Jon Skeet给出了一个用于一般操作的重试方法的实现。此外,您要求包含execption handling,以便在不重试的情况下取消操作。在这

在任务中出现异常时,根据用户输入多次重试任务的问题提供了C 5.0中的代码

我不熟悉.NETAsync,等待使用.NET4.0的构造在C4.0中整合代码时遇到困难。其他答案也包含谜题


你能给我一个完整的C4.0源代码,例如示例,如何在C中重试一个任务,包括异常处理和允许取消而不需要重试吗

如果我正确理解了您的问题,您要求的解决方案与中建议的类似。这里,Jon Skeet给出了一个用于一般操作的重试方法的实现。此外,您要求包含execption handling,以便在不重试的情况下取消操作。在这种情况下,Jon还提到了合并ShouldRetryException方法的可能性,您可以使用该方法确定重试是否合理。因此,我将一些示例代码合并到Jon的原始代码中:

public static Func<T> Retry(Func<T> original, int retryCount)
{
    return () =>
    {
        while (true)
        {
            try
            {
                return original();
            }
            catch (Exception e)
            {
                if (retryCount == 0 || !ShouldRetry(e))
                {
                    throw;
                }

                // TODO: Logging
                retryCount--;
            }
        }
   };
}

public static bool ShouldRetry(Exception e) {
    return (e is MySpecialExceptionThatAllowsForARetry)
}
那么,如果要结合引用,那么应该规定:

private static Task<T> CreateTaskWithRetry<T>(Func<T> action, int retryCount)
代替:

public static Func<T> Retry(Func<T> original, int retryCount)

您只需复制粘贴的代码即可。我看到了它,我很难将完整的示例代码组合在一起。@fulproof-如果您就使用此示例遇到的困难提出具体问题,可能会有所帮助。对我来说,这似乎是相当清楚的。此外,我还试图找到一个使用普通.NET4.0代码的答案,afaik就是这么做的,但理解的问题似乎在别处。因此,如果您能按照Andrew的建议来识别这些问题,这将是非常有帮助的?@bigge,我希望您能提供一个示例,即我可以编译并运行的完整代码。返回Func在这里似乎没有必要。您可以在内部运行循环。其思想是您只需在Task.run的答案中提供方法,而不是提供其他函数并尝试重试该任务。方法本身不需要将自身移动到线程池线程。不需要,谢谢。你似乎是一个很不讲理、要求很高的人,除了为你做全部工作的人之外,你什么都不接受。当有人花时间帮助你,为你的问题提供了大部分解决方案时,你根本不愿意接受。@Servy,你能把你的意见放在这里或那里作为答案吗?我不明白!当我特别要求将.NET 4.0中的答案和代码迁移到.NET 4.0时,您是否参考了.NET 4.5的Task.Run缺席.NET 4.0?如果您需要一个4.0解决方案,您可以使用Task.Factory.StartNew,因为这就是Run的全部功能。我想你可以自己推断,我不同意。如果你花几秒钟对问题进行一些琐碎的研究,然后自己找到解决方案,那么你所花的时间和精力要远远少于在自己没有投入时间或精力的情况下,花时间请别人为你做工作。这最终会消耗更多的时间,甚至是你自己的时间,而当你加上其他人的时间,效率显然更差。现在,对于一个更复杂的问题,你无法在谷歌搜索的20秒内回答,很可能提问会更有效率。-1你在后续行动中的态度,而不是针对问题中明显的弱点改进你的问题,再加上阅读这个毫无价值的问题和答案浪费了我几分钟的时间,这让我想让这个问题消失。你能不能继续你到目前为止得到的和/或缺少的部分是什么,或者删除这个问题。或者接受一个答案
public static Func<T> Retry(Func<T> original, int retryCount)