gpt4 book ai didi

c# - 在 C# 中使用 BeginRead 捕获异常

转载 作者:行者123 更新时间:2023-11-30 16:33:20 37 4
gpt4 key购买 nike

当使用异步代码通过 BeginXXX/EndXXX 模式从流等中读取时,我相信在调用 EndXXX 时会抛出在此过程中发生的任何异常。

这是否意味着对 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.
}
}

最佳答案

好吧,任何代码都可以抛出异常,所以“从不”很重要……例如,OutOfMemoryExceptionThreadAbortException,或者其他一些表明资源饱和的异常(例如,它以某种方式无法启动异步操作)。

如果那是只写流,它可能(虽然我还没有测试过)也会立即抛出。如果 stream 结果为 null,它肯定会立即抛出。

但是!在我提到的所有情况下,正确的行为可能是让它冒泡;它们都表明与当前逻辑无关的非常基本的问题。所以不:我不会在这里try/catch,除非有一些特定我期望并想以某种方式处理的东西。

关于c# - 在 C# 中使用 BeginRead 捕获异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3324445/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com