Asynchronous Writing, Asynchronous Reading : Asynchronous « Thread « C# / CSharp Tutorial






using System;
using System.IO;
using System.Threading;

class MainClass
{
    static FileStream BinaryFile;
    static byte[] ByteArray;
    static IAsyncResult AsyncReadResultImplementation;
    static IAsyncResult AsyncWriteResultImplementation;
    static AsyncCallback ReadBytesCompleteCallback;
    static AsyncCallback WriteBytesCompleteCallback;

    public static void OnReadBytesComplete(IAsyncResult AsyncResult)
    {
        int BytesRead;

        BytesRead = BinaryFile.EndRead(AsyncResult);
        Console.WriteLine(BytesRead);
        for (int i = 0; i < 256; i++)
        {
            if (ByteArray[i] != (byte)i)
            {
                Console.WriteLine("Read test failed for byte at offset {0}.", i);
            }
        }
    }

    public static void OnWriteBytesComplete(IAsyncResult AsyncResult)
    {
        BinaryFile.EndWrite(AsyncResult);
    }

    public static void Main()
    {
        AsyncReadResultImplementation = null;
        BinaryFile = new FileStream("test.dat", FileMode.Create, FileAccess.ReadWrite);
        ByteArray = new byte[256];
        ReadBytesCompleteCallback = new AsyncCallback(OnReadBytesComplete);
        WriteBytesCompleteCallback = new AsyncCallback(OnWriteBytesComplete);

        for (int i = 0; i < 256; i++)
            ByteArray[i] = (byte)i;
        AsyncWriteResultImplementation = BinaryFile.BeginWrite(ByteArray, 0, 256, WriteBytesCompleteCallback, null);

        WaitHandle WaitOnWriteIO = AsyncWriteResultImplementation.AsyncWaitHandle;
        WaitOnWriteIO.WaitOne();

        BinaryFile.Seek(0, SeekOrigin.Begin);
        AsyncReadResultImplementation = BinaryFile.BeginRead(ByteArray, 0, 256, ReadBytesCompleteCallback, null);

        WaitHandle WaitOnReadIO = AsyncReadResultImplementation.AsyncWaitHandle;
        WaitOnReadIO.WaitOne();
    }
}








20.23.Asynchronous
20.23.1.Asynchronous Calls: IAsyncResult
20.23.2.Async Method
20.23.3.Asynchronous Calls with Return Values
20.23.4.Use async job to compute
20.23.5.Pass delegate to deal with the IAsyncResult
20.23.6.Call asynchronously
20.23.7.Use AsyncCallback
20.23.8.Async Delegate
20.23.9.Asynchronous Invocation Of Delegates
20.23.10.Async Callback Delegate
20.23.11.Asynchronous Results Pattern Example
20.23.12.AsyncCallback and file viewer
20.23.13.Asynchronous Writing, Asynchronous Reading