Вопрос, наверняка, окажется глупым и не носящем практической ценности, но тем не менее. Сейчас вплотную разбираюсь с многопоточностью и параллельным программированием. На всех ресурсах пишут приблизительно следующее. "Приложение запускается всегда в приоритетном потоке...." и "При завершении всех приоритетных потоков, все фоновые также завершаются, даже, если не выполнили свои задачи". Отсюда сабж, почему приложение не завершается, когда явно указывается
Thread.CurrentThread.IsBackground = true;
?
Просьба помочь разобраться. И прицепом еще один. В чем практическое отличие
Task task = new Task(MyTask);
от
Thread tr = new Thread(new ThreadStart(MyTask));
?
я так понял, Задачи в целом эффективнее распределяются за счет планировщика задач
По первой части вопроса, думаю, это пробел в документации. В документации говорится, что происходит при завершении основного, нефонового потока, но ничего не говорится о случае, когда поток просто прекращает быть основным, не завершаясь при этом. Я не нашёл ссылок на это ни в документации, ни в спецификации языка.
По поводу второй части вопроса:
Thread — это физический (кроме очень крайних частных случаев) поток выполнения, имеющий прямое соответствие с потоками операционной системы. Task — абстракция задания, которое будет когда-либо выполнено, и соответствующий заданию код может бежать в одном или нескольких, иногда даже в нулевом количестве потоков.
Для случая использования, который вы привели, разница в эффекте незначительна: Task в том виде, в котором он вызывается в вашем с коде из вопроса, выполняется на потоке из пула потоков, а Thread создаётся вне пула. Но есть разница в использовании.
Для Thread'а вы можете лишь вызвать Join
, и синхронно дождаться его завершения.
Для Task вы можете, кроме того, установить продолжение посредством ContinueWith
, которое будет выполнено в будущем, по завершению этого Task'а. Кроме того, вы можете дождаться о окончания Task'а асинхронно, используя await
. Вы можете снаружи поймать и обработать исключение, произошедшее при выполнении Task'а. Всё это с Thread'ом недоступно.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Суть в чём: есть БД MSSQL и запрос в PHP, результат которого извлекается за счет mssql_fetch_assocТак вот на разных серверах дата в выборке приходит в разных...
На входе PNG с прозрачным фономКогда начинаю обрезать края, всё что не обрезано (на фото сложная фигура с кривыми краями) заливается чёрным...