我从来不完全满意异常处理的工作方式,有很多异常和try / catch带到表中(堆栈展开等),但似乎在此过程中破坏了很多OO模型。

无论如何,这是问题所在:

假设您有一些包装或包含网络文件IO操作的类(例如,在某处的特定UNC路径处读取和写入某个文件)。 由于各种原因,您不希望这些IO操作失败,因此,如果检测到它们失败,则请重试它们,并继续尝试它们,直到它们成功或达到超时为止。 我已经有一个方便的RetryTimer类,可以实例化该类,并使用它在重试之间使当前线程休眠,并确定超时时间已过,等等。

问题是您在此类的几种方法中都有大量的IO操作,并且需要将每个操作都包装在try-catch / retry逻辑中。

这是一个示例代码片段:

RetryTimer fileIORetryTimer = new RetryTimer(TimeSpan.FromHours(10));
bool success = false;
while (!success)
{
    try
    {
        // do some file IO which may succeed or fail
        success = true;
    }
    catch (IOException e)
    {
        if (fileIORetryTimer.HasExceededRetryTimeout)
        {
            throw e;
        }
        fileIORetryTimer.SleepUntilNextRetry();
    }
}

因此,如何避免在整个类中为每个文件IO操作复制大部分代码? 我的解决方案是使用匿名委托块和在类中执行传递给它的委托块的单个方法。 这使我可以通过其他方法执行以下操作:

this.RetryFileIO( delegate()
    {
        // some code block
    } );

我有点喜欢,但是还有很多不足之处。 我想听听其他人如何解决这类问题。

===============>>#1 票数:14 已采纳

我从来不完全满意异常处理的工作方式,有很多异常和try / catch带到表中(堆栈展开等),但似乎在此过程中破坏了很多OO模型。

无论如何,这是问题所在:

假设您有一些包装或包含网络文件IO操作的类(例如,在某处的特定UNC路径处读取和写入某个文件)。 由于各种原因,您不希望这些IO操作失败,因此,如果检测到它们失败,则请重试它们,并继续尝试它们,直到它们成功或达到超时为止。 我已经有一个方便的RetryTimer类,可以实例化该类,并使用它在重试之间使当前线程休眠,并确定超时时间已过,等等。

问题是您在此类的几种方法中都有大量的IO操作,并且需要将每个操作都包装在try-catch / retry逻辑中。

这是一个示例代码片段:

RetryTimer fileIORetryTimer = new RetryTimer(TimeSpan.FromHours(10));
bool success = false;
while (!success)
{
    try
    {
        // do some file IO which may succeed or fail
        success = true;
    }
    catch (IOException e)
    {
        if (fileIORetryTimer.HasExceededRetryTimeout)
        {
            throw e;
        }
        fileIORetryTimer.SleepUntilNextRetry();
    }
}

因此,如何避免在整个类中为每个文件IO操作复制大部分代码? 我的解决方案是使用匿名委托块和在类中执行传递给它的委托块的单个方法。 这使我可以通过其他方法执行以下操作:

this.RetryFileIO( delegate()
    {
        // some code block
    } );

我有点喜欢,但是还有很多不足之处。 我想听听其他人如何解决这类问题。

===============>>#2 票数:4

我从来不完全满意异常处理的工作方式,有很多异常和try / catch带到表中(堆栈展开等),但似乎在此过程中破坏了很多OO模型。

无论如何,这是问题所在:

假设您有一些包装或包含网络文件IO操作的类(例如,在某处的特定UNC路径处读取和写入某个文件)。 由于各种原因,您不希望这些IO操作失败,因此,如果检测到它们失败,则请重试它们,并继续尝试它们,直到它们成功或达到超时为止。 我已经有一个方便的RetryTimer类,可以实例化该类,并使用它在重试之间使当前线程休眠,并确定超时时间已过,等等。

问题是您在此类的几种方法中都有大量的IO操作,并且需要将每个操作都包装在try-catch / retry逻辑中。

这是一个示例代码片段:

RetryTimer fileIORetryTimer = new RetryTimer(TimeSpan.FromHours(10));
bool success = false;
while (!success)
{
    try
    {
        // do some file IO which may succeed or fail
        success = true;
    }
    catch (IOException e)
    {
        if (fileIORetryTimer.HasExceededRetryTimeout)
        {
            throw e;
        }
        fileIORetryTimer.SleepUntilNextRetry();
    }
}

因此,如何避免在整个类中为每个文件IO操作复制大部分代码? 我的解决方案是使用匿名委托块和在类中执行传递给它的委托块的单个方法。 这使我可以通过其他方法执行以下操作:

this.RetryFileIO( delegate()
    {
        // some code block
    } );

我有点喜欢,但是还有很多不足之处。 我想听听其他人如何解决这类问题。

===============>>#3 票数:2

我从来不完全满意异常处理的工作方式,有很多异常和try / catch带到表中(堆栈展开等),但似乎在此过程中破坏了很多OO模型。

无论如何,这是问题所在:

假设您有一些包装或包含网络文件IO操作的类(例如,在某处的特定UNC路径处读取和写入某个文件)。 由于各种原因,您不希望这些IO操作失败,因此,如果检测到它们失败,则请重试它们,并继续尝试它们,直到它们成功或达到超时为止。 我已经有一个方便的RetryTimer类,可以实例化该类,并使用它在重试之间使当前线程休眠,并确定超时时间已过,等等。

问题是您在此类的几种方法中都有大量的IO操作,并且需要将每个操作都包装在try-catch / retry逻辑中。

这是一个示例代码片段:

RetryTimer fileIORetryTimer = new RetryTimer(TimeSpan.FromHours(10));
bool success = false;
while (!success)
{
    try
    {
        // do some file IO which may succeed or fail
        success = true;
    }
    catch (IOException e)
    {
        if (fileIORetryTimer.HasExceededRetryTimeout)
        {
            throw e;
        }
        fileIORetryTimer.SleepUntilNextRetry();
    }
}

因此,如何避免在整个类中为每个文件IO操作复制大部分代码? 我的解决方案是使用匿名委托块和在类中执行传递给它的委托块的单个方法。 这使我可以通过其他方法执行以下操作:

this.RetryFileIO( delegate()
    {
        // some code block
    } );

我有点喜欢,但是还有很多不足之处。 我想听听其他人如何解决这类问题。

===============>>#4 票数:2

我从来不完全满意异常处理的工作方式,有很多异常和try / catch带到表中(堆栈展开等),但似乎在此过程中破坏了很多OO模型。

无论如何,这是问题所在:

假设您有一些包装或包含网络文件IO操作的类(例如,在某处的特定UNC路径处读取和写入某个文件)。 由于各种原因,您不希望这些IO操作失败,因此,如果检测到它们失败,则请重试它们,并继续尝试它们,直到它们成功或达到超时为止。 我已经有一个方便的RetryTimer类,可以实例化该类,并使用它在重试之间使当前线程休眠,并确定超时时间已过,等等。

问题是您在此类的几种方法中都有大量的IO操作,并且需要将每个操作都包装在try-catch / retry逻辑中。

这是一个示例代码片段:

RetryTimer fileIORetryTimer = new RetryTimer(TimeSpan.FromHours(10));
bool success = false;
while (!success)
{
    try
    {
        // do some file IO which may succeed or fail
        success = true;
    }
    catch (IOException e)
    {
        if (fileIORetryTimer.HasExceededRetryTimeout)
        {
            throw e;
        }
        fileIORetryTimer.SleepUntilNextRetry();
    }
}

因此,如何避免在整个类中为每个文件IO操作复制大部分代码? 我的解决方案是使用匿名委托块和在类中执行传递给它的委托块的单个方法。 这使我可以通过其他方法执行以下操作:

this.RetryFileIO( delegate()
    {
        // some code block
    } );

我有点喜欢,但是还有很多不足之处。 我想听听其他人如何解决这类问题。

  ask by Wedge translate from so

未解决问题?本站智能推荐:

1回复

从c#中的异常传递错误代码[重复]

这个问题已经在这里有了答案: ASP.NET-在表示层 1答案中 显示业务层错误 在我的应用程序中,发生异常时,我需要根据错误代码将错误代码从业务层传递到此处的表示层,我需要显示数据库中可用的消息。 我想知道如何从BL传递错误代码并在表示层中获取错误代码。
2回复

与C ++ / Win32中的错误代码相比,为什么C#/ .NET编程中的异常如此受欢迎? [关闭]

我是从C ++ / Win32开发环境迁移到C#/ .NET的人。 我注意到的一件事是,大多数错误的状态是通过使用错误代码及其传播在C ++ / Win32中处理的。 相反,C#/ .NET中的大多数错误状态似乎都是通过使用异常来处理的,并且很少建议使用错误代码。 为什么这样?
1回复

C#异常处理与方法结果的返回错误

我正在开发一些c#类或更好的组件。 它们相互之间嵌套得很深,任何步骤都可能出错。 因此,我可以让类A调用类B上的方法,该方法可以调用类C和D上的方法。现在这些类中的任何一个都可能出错,但类A负责处理在处理过程中发生的所有错误。提醒用户并为处理生成适当的响应。 现在的问题是,我不知道
5回复

如何为“浮动方法”返回null-错误处理

我想在代码中添加一些错误处理。 对于以下示例,我不知道如何执行此操作: 因此,想法是,我需要检查RawData是否已设置,然后在GetMaxX()方法中进行其余工作。 这是个好习惯吗? 在这种情况下您会怎么做?
2回复

Nhibernate数据库独立错误处理

试图为我的上一个问题找到解决方案( https://stackoverflow.com/questions/29539767/sql-nhibernate-exceptions-with-sqlite-and-c-sharp-and-known-error-codes ),我决定用我自己的自定义
4回复

使用Timer的交叉线程错误处理表单

我在我的一个窗体上设置了10秒的计时器。 对于OnTimedEvent,我设置表格在时间结束后处理。 但是似乎有一个错误 用户代码未处理InvalidOperationException。 跨线程操作无效:控制'notificationForm'从其创建的线程以外的线程访问
2回复

WPF自定义错误处理对话框?

我试图设置我的WPF应用程序,以便在未处理异常时弹出错误对话框。 在良好的WinForms中,可以通过添加 到Program.cs文件,然后显示事件处理代码中所需的任何对话框。 在WPF中,我尝试使用 但是,当我在错误处理自定义窗口上使用Show()时,应用程序立即转到“ b
3回复

C#控制台应用程序中未处理的异常导致AppCrash

我在Visual Studio 2010中内置了一个Windows控制台应用程序,该应用程序始终崩溃,但是该Visual Studio调试工具或代码中的try / catch语句均未捕获该错误。 我已经设法在系统上找到WER文件,并且希望能够了解该文件的内容,因此我可以准确地查明是什么原因
1回复

Nido的ASP.NET C#异常处理

我正在使用Nido Framework开发我的ASP.NET Web应用程序。 它具有默认模式来记录后端层中发生的所有错误。 但是现在我想处理页面级异常并记录它们。 我可以使用相同的框架来执行此操作,还是必须寻找其他方法? 任何帮助将不胜感激
15回复

Java或C#中异常管理的最佳实践[关闭]

我一直在决定如何在我的应用程序中处理异常。 如果我的异常问题来自1)通过远程服务访问数据或2)反序列化JSON对象。 不幸的是,我不能保证这些任务中的任何一个都成功(切断网络连接,不正确的JSON对象,这是我无法控制的)。 因此,如果我遇到异常,我只需在函数内捕获它并返回FALSE