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



Download 6,27 Mb.
Pdf ko'rish
bet572/658
Sana12.06.2023
Hajmi6,27 Mb.
#950840
1   ...   568   569   570   571   572   573   574   575   ...   658
Bog'liq
CLR via C Programmirovanie na platforme Microsoft NET Framework 4 5 na yazyke C

Фабрики заданий
Иногда возникает необходимость получить набор объектов 
Task
, находящихся 
в одном и том же состоянии. Для этого не нужно раз за разом передавать одни и те 
же параметры в конструктор каждого задания, достаточно создать 
фабрику заданий
(task factory), инкапсулирующую нужное состояние. В пространстве имен 
System.
Threading.Tasks
определены типы 
TaskFactory
и 
TaskFactory
. Оба 
этих типа являются производными от типа 
System.Object
; то есть они являются 
равноранговыми.
Для создания группы заданий, не возвращающих значений, конструируется 
класс 
TaskFactory
. Если же эти задания должны возвращать некое значение, по-
требуется класс 
TaskFactory
, которому в обобщенном аргументе 
TResult
передается желаемый тип возвращаемого значения. При создании этих классов 
их конструкторам передаются параметры, которыми задания должны обладать по 
умолчанию. А точнее, передаются параметры 
CancellationToken

TaskScheduler

TaskCreationOptions
и 
TaskContinuationOptions
, наделяющие задания нужными 
свойствами.
Пример применения класса 
TaskFactory
:
Task parent = new Task(() => {
varcts = new CancellationTokenSource();
vartf = new TaskFactory(cts.Token,
TaskCreationOptions.AttachedToParent,
TaskContinuationOptions.ExecuteSynchronously,
TaskScheduler.Default);
// Задание создает и запускает 3 дочерних задания
varchildTasks = new[] {
tf.StartNew(() => Sum(cts.Token, 10000)),
tf.StartNew(() => Sum(cts.Token, 20000)),
tf.StartNew(() => Sum(cts.Token, Int32.MaxValue)) // Исключение 
// OverflowException
};
// Если дочернее задание становится источником исключения,
// отменяем все дочерние задания
for (Int32 task = 0; task childTasks[task].ContinueWith(
t => cts.Cancel(), TaskContinuationOptions.OnlyOnFaulted);
// После завершения дочерних заданий получаем максимальное
// возвращенное значение и передаем его другому заданию
// для вывода
tf.ContinueWhenAll(
childTasks,
продолжение



768
Download 6,27 Mb.

Do'stlaringiz bilan baham:
1   ...   568   569   570   571   572   573   574   575   ...   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