Net framework 5, а также среды Visual Studio 2012 и C#



Download 6,27 Mb.
Pdf ko'rish
bet590/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   586   587   588   589   590   591   592   593   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C


Глава.28 .Асинхронные.операции.ввода-вывода
проводить в пуле в режиме ожидания. А значит, в начале уборки мусора потоки 
окажутся наверху стека, и поиск корней не займет много времени.
При достижении отлаживаемым приложением точки останова Windows при-
останавливает все его потоки. После возвращения к отладке следует возобновить 
все потоки, а значит, при наличии большого количества потоков пошаговая отладка 
будет выполняться крайне медленно. Асинхронный ввод-вывод позволяет обойтись 
всего несколькими потоками, повышая тем самым производительность отладки.
Выгоды этим не исчерпываются. Предположим, ваше приложение должно за-
грузить с различных сайтов 10 изображений. Загрузка каждого из них занимает 
5 секунд. В синхронном режиме выполнения (загрузка одного изображения за 
другим) вам потребуется 50 секунд. Однако при помощи всего одного потока можно 
начать 10 асинхронных операций загрузки и получить все изображения всего за 
5 секунд! То есть время выполнения нескольких синхронных операций ввода-вывода 
получается путем суммирования времени, которое занимает каждая отдельная опе-
рация, в то время как в случае набора асинхронных операций ввода-вывода время 
их завершения определяется самой медленной из выполняемых операций.
Для приложений с графическим интерфейсом асинхронные операции открыва-
ют еще одно преимущество: их интерфейс всегда реагирует на действия конечного 
пользователя. В приложениях Silverlight и Windows Store вообще все операции 
ввода-вывода выполняются только асинхронно, потому что библиотеки классов 
операций ввода-вывода предоставляют только асинхронные версии своих операций
методы выполнения синхронных операций просто отсутствуют. Это было сделано 
намеренно, чтобы приложение не переставало реагировать на действия конечного 
пользователя.
асинхронные функции C#
Асинхронные операции являются ключом к созданию высокопроизводительных 
масштабируемых приложений, выполняющих множество операций при помощи 
небольшого количества потоков. Вместе с пулом потоков они дают возможность 
эффективно задействовать все процессоры в системе. Осознавая этот огромный 
потенциал, разработчики CLR разработали модель программирования, призванную 
сделать его доступным для всех программистов
1
. Эта модель использует объекты 
1
Разработчики, использующие версии Microsoft .NET Framework до 4.5, могут восполь-
зоваться моим классом AsyncEnumerator (из библиотеки Power Threading — см. http://
Wintellect.com/) — его модель программирования достаточно похожа на модель .NET 
Framework 4.5. Собственно, успех класса AsnycEnumerator позволил мне помочь Microsoft 
в проектировании модели, рассматриваемой в этой главе. Ввиду их сходства адаптация 
кода, использующего класс AsyncEnumerator, для новой программной модели проходит 
тривиально.


793
Асинхронные.функции.C#
Task
(см. главу 27) и 
асинхронные функции
языка C#. В следующем примере кода 
асинхронные функции используются для выполнения двух асинхронных операций.
private static async Task IssueClientRequestAsync(String serverName, 
String message) 

using (var pipe = new NamedPipeClientStream(serverName, "PipeName", 
PipeDirection.InOut, PipeOptions.Asynchronous | PipeOptions.WriteThrough)) 
{
pipe.Connect(); // Прежде чем задавать ReadMode, необходимо 
pipe.ReadMode = PipeTransmissionMode.Message; // вызвать Connect
// Асинхронная отправка данных серверу
Byte[] request = Encoding.UTF8.GetBytes(message);
await pipe.WriteAsync(request, 0, request.Length);
// Асинхронное чтение ответа сервера
Byte[] response = new Byte[1000]; 
Int32 bytesRead = await pipe.ReadAsync(response, 0, response.Length); 
return Encoding.UTF8.GetString(response, 0, bytesRead); 
} // Закрытие канала
}
В приведенном коде сразу видно, что 
IssueClientRequestAsync
является асин-
хронной функцией, потому что ключевое слово 
async
следует в первой строке сразу 
же после 
static
. Когда метод помечается ключевым словом 
async
, компилятор 
преобразует код метода в тип, реализующий конечный автомат (более подробное 
описание приводится в следующем разделе). Это позволяет потоку выполнить 

Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   586   587   588   589   590   591   592   593   ...   658




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish