2011-03-30 88 views
1

使用C#,如何返回從我調用EndRead的函數中讀取的字節數?如何獲得在異步讀取中讀取的字節數?

即:

x.BeginRead (...ReadProc..); 
// how can I get the number of bytes read here? 

ReadProc (IAsyncResult ar) 
{ 
    int numBytesRead = EndRead(); 
    // how can I return numBytesRead? 

} 

回答

2

這聽起來像你真的不希望使用異步代碼?使用異步調用時,無法知道有多少字節被讀取,直到完成異步調用,這些調用將處於不同的執行線程中。

在調用BeginRead並使用某種類型的互斥體等待EndRead完成並獲取該值之後,您可以阻止,但是這樣做沒有必要異步執行。

2

如果您需要回到您稱爲BeginRead的位置,那麼您錯過了一個技巧;你可能會打電話給Read。異步的關鍵在於你通常以斷開的方式處理數據。

但是,如果您只想在之外的其他東西正在讀取,您也可以在原始方法中調用EndRead。只是不要指定回調。

+0

+1,不錯的細微差別:) – 2011-03-30 14:46:02