52 lines
1.0 KiB
C#
52 lines
1.0 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Threading;
|
|
|
|
class Test {
|
|
|
|
static int sum = 0;
|
|
static int count = 0;
|
|
|
|
static void async_callback (IAsyncResult ar)
|
|
{
|
|
byte [] buf = (byte [])ar.AsyncState;
|
|
Interlocked.Add (ref sum, buf [0]);
|
|
Interlocked.Increment (ref count);
|
|
}
|
|
|
|
static int Main () {
|
|
byte [] buf = new byte [1];
|
|
AsyncCallback ac = new AsyncCallback (async_callback);
|
|
IAsyncResult ar;
|
|
int sum0 = 0;
|
|
int count0 = 0;
|
|
|
|
FileStream s = new FileStream ("async_read.exe", FileMode.Open, FileAccess.Read);
|
|
|
|
s.Position = 0;
|
|
while (s.Read (buf, 0, 1) == 1) {
|
|
sum0 += buf [0];
|
|
count0 ++;
|
|
}
|
|
|
|
s.Position = 0;
|
|
|
|
do {
|
|
buf = new byte [1];
|
|
ar = s.BeginRead (buf, 0, 1, ac, buf);
|
|
} while (s.EndRead (ar) == 1);
|
|
|
|
Thread.Sleep (100);
|
|
|
|
s.Close ();
|
|
|
|
count0 ++; // async_callback is invoked for the "finished reading" case too
|
|
Console.WriteLine ("CSUM: " + sum + " " + sum0);
|
|
Console.WriteLine ("Count: " + count + " " + count0);
|
|
if (sum != sum0 || count != count0)
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
}
|