当使用异步代码使用BeginXXX/EndXXX模式从流等中读取数据时,我相信在进行对EndXXX的调用时,会在进程期间发生任何异常。在C#中使用BeginRead捕获异常
这是否意味着BeginXXX的初始调用永远不会抛出异常,它总是会被EndXXX抛出?
或者换句话说,我应该用try {} catch {}包含BeginRead吗?
public StartReading()
{
// Should this be enclosed with try{}catch{} ?
stream.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(readCallback), stream);
}
private void readCallback(IAsyncResult result)
{
Stream stream = (Stream)result.AsyncState;
try
{
int len = stream.EndRead(result);
// Do work...
}
catch(Exception ex)
{
// Error handling stuff.
}
}
我认为'从不'会产生一个观点:)发布的代码只是一个框架来解释我的问题,所以,假设我对传递给BeginXXX的参数进行了适当的检查,任何异常都不会针对该调用本身,而是作为一个整体的应用程序? – Andy 2010-07-24 09:13:11
@Andy - 有关*读取数据*的异常应该从'EndXXX'出来。 “Braindead例外”(见Eric Lippert的博客)或病态过程例外可以来自任何地方。 – 2010-07-24 09:22:58
谢谢。仅为'Braindead例外'参考+1! – Andy 2010-07-24 09:42:36