Загрузка...

Thread или Task

Тема в разделе C# создана пользователем champloo 26 май 2023. 199 просмотров

Загрузка...
  1. champloo
    champloo Автор темы 26 май 2023 322 19 окт 2022
    учу с#, недавно написал авторизацию на один простенький сайт и начал изучать многопоточность и задался вопросом: что юзать для чекера thread или task?
     
  2. ChatGPT
    ChatGPT 26 май 2023 2253 14 мар 2023
    champloo, для решения этого вопроса нужно понимать разницу между `Thread` и `Task`.

    `Thread` - это низкоуровневый механизм, который позволяет создавать и управлять потоками выполнения. Он предоставляет полный контроль над потоками, но требует больше усилий для управления ими.

    `Task` - это более высокоуровневый механизм, который позволяет создавать и управлять задачами. Он предоставляет удобный интерфейс для выполнения асинхронных операций и управления потоками выполнения.

    Если тебе нужно выполнить простую асинхронную операцию, то `Task` будет лучшим выбором. Если же тебе нужно полный контроль над потоками выполнения, то `Thread` будет более подходящим выбором.

    Также стоит учитывать, что использование `Thread` может привести к проблемам с синхронизацией и блокировками, поэтому рекомендуется использовать `Task` для большинства задач.

    Надеюсь, это поможет тебе определиться с выбором. Если у тебя есть дополнительные вопросы, не стесняйся задавать их.
     
  3. alvkN
    alvkN 26 май 2023 50 1 июл 2018
    Нейронка выше выдала базу, треды никто не юзает без прямой в них нужды. Также важно уточнить, что Таски - это не про параллелизм, а про асинхронность (хоть и в дотнете есть тредпул под таски, но спецификация не дает никакой инфы по поводу того, в каком потоке твои таски будут выполняться)

    По исходным данным, описанным тобой, могу тебе предложить вариант создания тасок без их await'a с добавлением лист, а потом вызовом
    CSHARP
    await Task.WhenAll(list)
    Подробнее можешь почитать тут, там есть хороший пример с разбитием на чанки. Добавлю только поправку: в статье автор разбивает на чанки через .Skip().Take() в цикле, но появился прекрасный метод .Chunk(), который делает это в куда более простой манере :)
     
    1. vtlstolyarov
      alvkN, Автор блога по твоей ссылке крайне хуёво обращается с IEnumerable, так что я не особо доверяю его "исследованиям" в куда более сложной области таск менеджмента. Основная мысль, которой он хотел выбенуться, это то что лучше сделать один запрос с 1000 id чем 1000 запросов с 1 id и проив этого возразить нечего, а вот по поводу того как он делает эти запросы замечаний куча.
  4. dandlmorrow
    dandlmorrow 27 май 2023 83 11 янв 2020
    ну смотри, thread это низкоуровневая залупа, которая создает новый поток и выполняет код в нем. Task же немного по другому работает, он апеллирует между потоками, т.е не факт, что каждый новый Task создаст свой поток. Соответственно если тебе нужна скорость - используй thread (****/чек) многопоточный, в остальных случаях лучше юзать Task
     
    27 май 2023 Изменено
    1. champloo Автор темы
      dandlmorrow, спасибо, я все таки заюзаю и то и то и сравню, проверю, что все таки лучше. думаю это лучший вариант, а то получается опять мнения разделились
Top