Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

FileStream.EndRead Method (IAsyncResult)


Waits for the pending asynchronous read operation to complete. (Consider using ReadAsync instead; see the Remarks section.)

Namespace:   System.IO
Assembly:  mscorlib (in mscorlib.dll)

public override int EndRead(
	IAsyncResult asyncResult


Type: System.IAsyncResult

The reference to the pending asynchronous request to wait for.

Return Value

Type: System.Int32

The number of bytes read from the stream, between 0 and the number of bytes you requested. Streams only return 0 at the end of the stream, otherwise, they should block until at least 1 byte is available.

Exception Condition

asyncResult is null.


This IAsyncResult object was not created by calling BeginRead on this class.


EndRead is called multiple times.


The stream is closed or an internal error has occurred.

In the .NET Framework 4 and earlier versions, you have to use methods such as BeginRead and EndRead to implement asynchronous file operations. These methods are still available in the .NET Framework 4.5 to support legacy code; however, the new async methods, such as ReadAsync, WriteAsync, CopyToAsync, and FlushAsync, help you implement asynchronous file operations more easily.

EndRead must be called exactly for every call to BeginRead. Failing to end a read process before beginning another read can cause undesirable behavior such as deadlock.

This method overrides EndRead.

EndRead can be called on every IAsyncResult from BeginRead. Calling EndRead tells you how many bytes were read from the stream. EndRead will block until the I/O operation has completed.

This code example is part of a larger example provided for the FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) constructor.

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.");
    Console.WriteLine("The data was written to {0} and verified.",

    // Signal the main thread that the verification is finished.

.NET Framework
Available since 1.1
Available since 2.0
Windows Phone Silverlight
Available since 7.0
Return to top
Was this page helpful?
(1500 characters remaining)
Thank you for your feedback
© 2015 Microsoft