C# 停止方法执行
我有一个类尝试从web服务获取信息几次:C# 停止方法执行,c#,compact-framework,C#,Compact Framework,我有一个类尝试从web服务获取信息几次: public TResult Try(Func<TResult> func, int maxRetries) { TResult returnValue = default(TResult); int numTries = 0; bool succeeded = false; while (numTries < maxRetries) { try {
public TResult Try(Func<TResult> func, int maxRetries)
{
TResult returnValue = default(TResult);
int numTries = 0;
bool succeeded = false;
while (numTries < maxRetries)
{
try
{
returnValue = func();
succeeded = true;
}
catch (Exception ex)
{
Log(ex,numTries);
}
finally
{
numTries++;
}
if (succeeded)
{
return returnValue;
}
else
{
if (numTries == maxRetries)
{
//ask user what to do
}
}
}
我当然可以检查返回值是否为null,如:
someValue = retry.Try(()=>webService.method(),maxRetries));
if (someValue == null)
return;
但这意味着代码中会有很多变化,我想避免这种情况,最好是通过Try方法来实现。我可以想到两件事。您可以确保TResult属于接口类型,该接口类型具有表示成功请求的布尔字段IsSuccessful或IsValid等。如果无法修改TResult,另一个选项是在try方法上使用Out参数传递另一个值。无法停止方法的执行。不过首先想到的是抛出一个异常并从调用方法捕获它 但请记住,您永远不应该依赖异常来控制这样的流。。但是如果你真的不能重写调用方法,这可能是你唯一的选择 另一个选项可能是让返回的结果通过接口设置一个标志,通知调用方它已成功完成
someValue = retry.Try(()=>webService.method(),maxRetries));
if (someValue == null)
return;