Однако несколькими способами Модель асинхронного программирования (APM) была предложена для этого типа Асинхронность
Асинхронная операция, которая используетшаблон проектирования IAsyncResult реализован в виде двух методов с именами BeginOperationName
и EndOperationName
, которые начинают и заканчивают асинхронную операцию OperationName
соответственно.Например, класс FileStream
предоставляет методы BeginRead
и EndRead
для асинхронного чтения байтов из файла.Эти методы реализуют асинхронную версию метода Read.
Чтобы ответить на ваш вопрос
Поскольку, когда ЦП выделяет время этому потоку, а поток бездействует в ожидании ответа,это было бы пустой тратой процессорного времени, верно?
Никакая блокировка потока и ожидание обратного вызова порта завершения не приводит к потере циклов ЦП, однако опрос по потоку будет.
Существует много способов, как это работает, однако пример использования можно увидеть здесь
Пример использования
private static void TestWrite()
{
// Must specify FileOptions.Asynchronous otherwise the BeginXxx/EndXxx methods are
// handled synchronously.
FileStream fs = new FileStream(Program.FilePath, FileMode.OpenOrCreate,
FileAccess.Write, FileShare.None, 8, FileOptions.Asynchronous);
string content = "A quick brown fox jumps over the lazy dog";
byte[] data = Encoding.Unicode.GetBytes(content);
// Begins to write content to the file stream.
Console.WriteLine("Begin to write");
fs.BeginWrite(data, 0, data.Length, Program.OnWriteCompleted, fs);
Console.WriteLine("Write queued");
}
private static void OnWriteCompleted(IAsyncResult asyncResult)
{
// End the async operation.
FileStream fs = (FileStream)asyncResult.AsyncState;
fs.EndWrite(asyncResult);
// Close the file stream.
fs.Close();
Console.WriteLine("Write completed");
// Test async read bytes from the file stream.
Program.TestRead();
}