2011-03-30 94 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