0 / 0 / 0
Регистрация: 01.05.2014
Сообщений: 72
Записей в блоге: 1
1

Запуск Task в том же потоке

01.08.2017, 13:03. Показов 2145. Ответов 1
Метки нет (Все метки)

Привет,
что-то затруднился. Возник вопрос, всегда ли Task запускается в отдельном потоке. Есть метод, запускается из UI-потока:

C#
1
2
3
4
5
6
7
8
9
10
11
//метод вызывается из UI-потока
      public void DoWork()
        {
            Task.Factory.StartNew(() =>
            {
                код работает с переменными UI потока//1
            }, 
            CancellationToken.None, 
            TaskCreationOptions.None, 
            TaskScheduler.FromCurrentSynchronizationContext());//2
        }
Здесь в строке 1 не будет ошибки, так как в при запуске Task установлена опция TaskScheduler.FromCurrentSynchronizationContext() в строке 2. Значит ли это что Task.Factory.StartNew() запустит задачу в том же потоке в котором он сам вызывался? То есть по факту никакой многопоточности не будет? (смысла нет, но для понимания работы).
Вообще, возможна ли ситуация когда для Task типа CPU-bound не будет выделен поток из ThreadPool?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.08.2017, 13:03
Ответы с готовыми решениями:

Control в потоке (Task)
Здравствуйте, есть программа в которой типа каждую секунду выводится число в label, хотел бы узнать...

Как выполнить делегат в потоке Task
Создал объект Task для работы PipeServer. Возникла необходимость вызвать синхронно в потоке Task...

DataGrid пополняется не в том потоке
Написал такой код для наполнения DataGrid. Но в методе LOAD DATA приложение падает и говорит мол...

Переход на предыдущую страницу оставаясь в том же потоке
Всем привет! Не знаю как реализовать такую тему. Есть страницы переход по ним осуществляется...

1
Эксперт .NET
15276 / 11577 / 3035
Регистрация: 17.09.2011
Сообщений: 19,377
02.08.2017, 10:43 2
Цитата Сообщение от rigorMortis Посмотреть сообщение
Значит ли это что Task.Factory.StartNew() запустит задачу в том же потоке в котором он сам вызывался?
Да.

Цитата Сообщение от rigorMortis Посмотреть сообщение
То есть по факту никакой многопоточности не будет?
Да.

Цитата Сообщение от rigorMortis Посмотреть сообщение
Вообще, возможна ли ситуация когда для Task типа CPU-bound не будет выделен поток из ThreadPool?
Разумеется.
Task — это задача, Thread — это работник.
Один работник может выполнять несколько задач одновременно, переключаясь от одной к другой.
В этом суть асинхронности и ее главное отличие от параллельности.
Task'и — они про асинхронность, а не параллельность.
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.08.2017, 10:43

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Повторный запуск Task, проверка условия
Есть код private async Task WatchTaskAsync(Task task) { ...

Запуск Task после его выполнения
Здравствуйте, столкнулся с проблемой, которую всё не как не могу решить: Есть кнопка, при нажатии...

Запуск нескольких Task-ов и ожидание их выполнения
Всем доброго времени суток. Мне необходимо отправлять сразу несколько запросов на линки какого-либо...

Чем черевато запуск множества Task
Заранее извиняюсь, ассинхронность это не совсем моё. Поэтому бить меня сильно не надо) У меня есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.