Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/191: Рейтинг темы: голосов - 191, средняя оценка - 4.64
3 / 3 / 1
Регистрация: 31.01.2013
Сообщений: 108

Разница между Thread.Sleep и await Task.Delay

13.09.2019, 11:56. Показов 39000. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Плохо понимаю разницу между использованием:

C#
1
2
Thread.Sleep(1000);
//Здесь код после задержки
и

C#
1
2
3
4
5
Task.Factory.StartNew(async () =>
{
      await Task.Delay(1000);
//Здесь код после задержки
});

Я конечно давно понял, что Thead.Sleep блокирует текущий поток. А там где используется async/await текущий поток не блокируется, и асинхронно вызывается код.

Но в чем именно разница при использовании того или другого способа приведенного выше, если они работают одинаково?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.09.2019, 11:56
Ответы с готовыми решениями:

Аналог Thread.Sleep или Task.Delay
Есть ли какой-нибудь аналог функциям Thread.Sleep или Task.Delay ? Мне необходимо сделать задержку без блокирования главного потока....

Async/await или разница между 2 методами
Добрых времени суток. Есть асинхронный метод: public Task<List<Address>> GetAllByStreet(string street) { return...

Task.Delay отказывает в работе
public static async void randr_sleep(TextEdit e, decimal min, decimal max, bool a) { if (!a) return; ...

5
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
13.09.2019, 12:39
Igorokmen, как они могут работать одинаково, если вы сами написали, что один блокирует, а второй нет.
На практике слип в форме не даст двигать ее по экрану, дилей напротив, можно делать что угодно
1
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
14.09.2019, 09:11
Если Task.Delay(x).Wait(); то разницы особой не будет.
Если же через async/await, то Sleep блокирует поток, а Delay ожидает.
1
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
14.09.2019, 23:54
Лучший ответ Сообщение было отмечено Igorokmen как решение

Решение

Цитата Сообщение от Igorokmen Посмотреть сообщение
Плохо понимаю разницу
C#
1
Thread.Sleep(1000);
Заставляет спать основной поток (синхронно выполняется с основным потоком) на n количество времени, и спать будет Ваш главный поток, где главная точка в процедуру, как правильно Вы подметили программа зависла. Бывает полезно тормознуть основной поток (когда например) работает другая программа и может повлиять на работу Вашей программы (к примеру скрипт CMD)

C#
1
await Task.Delay(1000);
await Ждёт завершения задачи. А Task.Delay это всего лишь время задержки.
Бывает полезно когда нужно посмотреть что происходит в цикле (как пример)
В видео я показал как работает цикл, с задержкой 1 мс, 150мс, и 1000мс (1сек)


Вот так это работает

C#
1
2
3
4
5
6
7
8
9
10
11
async private void AutoCrypt_Click(object sender, EventArgs e)
        {
            string a = tbSource.Text;
            tbSource.Text = string.Empty;
            for(i= 0; i < 1000000; i++)
            {
                tbCycle.Text = i.ToString();
                tbResultCrypt.Text = Crypt(a);
                await Task.Delay(Convert.ToInt32(tbMS.Text));
            }
        }
1
5 / 5 / 1
Регистрация: 30.09.2015
Сообщений: 17
14.10.2019, 18:53
C#
1
await Task.Delay(1000);
По факту, тут тоже поток спит, но другой асинхронный из пула.
1
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
15.10.2019, 01:42
Цитата Сообщение от DmitryB84 Посмотреть сообщение
По факту, тут тоже поток спит, но другой асинхронный из пула.
Кто ж в здравом уме будет такую реализацию таймера делать?
Они через аппаратные прерывания реализованы.

Обработчик срабатывания — да, выполняется в потоках пула.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.10.2019, 01:42
Помогаю со студенческими работами здесь

Как реализовать выход при условие=1 из Task.Delay(-1)?
Есть асинхронный таск, который подписывается на ивент, затем идёт бесконечное ожидание. Для наглядности примерная структура кода: ...

Аналог Thread.Sleep
когда вызываешь функцию Вызываю слип в потоке Thread.Sleep(300000) ТО программа начинает криво работать в чем дело ?

GetPixel в связке Thread.Sleep
Здравствуйте. Считываю цвет необходимого мне пикселя из игры. Код считывания собственно стандартный и рабочий: static extern...

Прервать ожидание Thread.Sleep
Можно ли прервать ожидание Thread.Sleep? У меня сейчас в отдельном потоке выполняется некий код, при нажатии кнопки стоп меняется...

Поговорим про Task и Thread
1) Объекты синхронизации, которые были в Thread актуальны для Task? 2) Изменились ли как-то эти объекты сихронизации (lock, monitor,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru