使用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?
}
使用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?
}
这听起来像你真的不希望使用异步代码?使用异步调用时,无法知道有多少字节被读取,直到完成异步调用,这些调用将处于不同的执行线程中。
在调用BeginRead并使用某种类型的互斥体等待EndRead完成并获取该值之后,您可以阻止,但是这样做没有必要异步执行。
如果您需要回到您称为BeginRead的位置,那么您错过了一个技巧;你可能会打电话给Read。异步的关键在于你通常以断开的方式处理数据。
但是,如果您只想在之外的其他东西正在读取,您也可以在原始方法中调用EndRead。只是不要指定回调。
+1,不错的细微差别:) – 2011-03-30 14:46:02