FileStream.EndRead(IAsyncResult) 方法

定义

等待挂起的异步读操作完成。 (请考虑改用 ReadAsync(Byte[], Int32, Int32, CancellationToken)。)

C#
public override int EndRead (IAsyncResult asyncResult);

参数

asyncResult
IAsyncResult

对所等待的挂起异步请求的引用。

返回

从流中读取的字节数,介于 0 和所请求的字节数之间。 流仅在流结尾返回 0,否则在至少有 1 个字节可用之前应一直进行阻止。

例外

asyncResultnull

IAsyncResult 对象不是通过对该类调用 BeginRead(Byte[], Int32, Int32, AsyncCallback, Object) 来创建的。

流已关闭或出现了内部错误。

示例

此代码示例是为构造函数提供的更大示例的 FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) 一部分。

C#
static void EndReadCallback(IAsyncResult asyncResult)
{
    State tempState = (State)asyncResult.AsyncState;
    int readCount = tempState.FStream.EndRead(asyncResult);

    int i = 0;
    while(i < readCount)
    {
        if(tempState.ReadArray[i] != tempState.WriteArray[i++])
        {
            Console.WriteLine("Error writing data.");
            tempState.FStream.Close();
            return;
        }
    }
    Console.WriteLine("The data was written to {0} and verified.",
        tempState.FStream.Name);
    tempState.FStream.Close();

    // Signal the main thread that the verification is finished.
    tempState.ManualEvent.Set();
}

注解

在 .NET Framework 4 及更早版本中,必须使用 和 EndReadBeginRead方法来实现异步文件操作。 这些方法在 .NET Framework 4.5 中仍然可用,以支持旧代码;但是,新的异步方法(如 ReadAsyncWriteAsyncCopyToAsyncFlushAsync)可帮助你更轻松地实现异步文件操作。

EndRead 每次调用 BeginRead都必须完全调用 。 在开始另一个读取之前未能结束读取进程可能会导致不良行为,例如死锁。

此方法重写 EndRead

EndRead可以从 中对每个IAsyncResultBeginRead调用 。 调用 EndRead 会告知从流中读取的字节数。 EndRead 将阻止,直到 I/O 操作完成。

适用于

产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1

另请参阅