368
Chương 9: File, thư mục, và I/O
// Bộ đệm chứa dữ liệu.
private byte[] buffer;
public AsyncProcessor(string fileName) {
buffer = new byte[bufferSize];
// Mở file, truyền giá trị true để hỗ trợ truy xuất bất đồng bộ.
inputStream = new FileStream(fileName, FileMode.Open,
FileAccess.Read, FileShare.Read, bufferSize, true);
}
public void StartProcess() {
// Bắt đầu quá trình đọc bất đồng bộ.
inputStream.BeginRead(buffer, 0, buffer.Length,
new AsyncCallback(OnCompletedRead), null);
}
private void OnCompletedRead(IAsyncResult asyncResult) {
// Một khối đã được đọc. Truy xuất dữ liệu.
int bytesRead = inputStream.EndRead(asyncResult);
// Nếu không đọc được byte nào, stream đang ở cuối file.
if (bytesRead > 0) {
// Tạm dừng để giả lập việc xử lý dữ liệu.
Console.WriteLine("\t[ASYNC READER]: Read one block.");
Thread.Sleep(TimeSpan.FromMilliseconds(20));
// Bắt đầu đọc khối kế tiếp.
inputStream.BeginRead(buffer, 0, buffer.Length,
new AsyncCallback(OnCompletedRead), null);
}else {