當使用異步代碼使用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