Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
667 / 213 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
1

Дождаться выполнения Task без Thread.Sleep?

01.03.2018, 11:19. Показов 2286. Ответов 1
Метки нет (Все метки)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
 
public class Test
{
    public static void Main()
    {
        Console.WriteLine("1");
        
        var task = new System.Threading.Tasks.Task(MyMethod);
        task.Start();
        System.Threading.Thread.Sleep(300);
        
        Console.WriteLine("2");
        
        System.Threading.Tasks.Task.WaitAll(new []{task});
        task.Wait();
        
                // TODO: remove this line!
        System.Threading.Thread.Sleep(2000);
    }
    
    async static void MyMethod()
    {
        Console.WriteLine("start");
        await System.Threading.Tasks.Task.Delay(1000);
        Console.WriteLine("end");
    }
}
Цитата Сообщение от OUTPUT
1
start
2
end
Если убрать Thread.Sleep, то программа прекращает работу раньше времени и на консоль не выводится строка "end".
Цитата Сообщение от OUTPUT
1
start
2
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2018, 11:19
Ответы с готовыми решениями:

Аналог Thread.Sleep в Task
Имеется пример который запускает пару потоков с задержкой. using System; using...

Разница между Thread.Sleep и await Task.Delay
Здравствуйте! Плохо понимаю разницу между использованием: Thread.Sleep(1000); //Здесь код...

Тестирование клиент-серверного приложения без Thread.Sleep ?
Есть пока что небольшой вебсокет-сервер. При покрытии этого сервера NUnit-тестами передо мной...

Получить результат выполнения Task без зависания окна
У меня у окна есть метод Initialize(), который должен запускать поток, внутри которого формируется...

1
Эксперт .NET
15269 / 11570 / 3035
Регистрация: 17.09.2011
Сообщений: 19,357
01.03.2018, 11:29 2
Начиная с C# 7.2 можно сделать метод Main асинхронным:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public static async Task Main()
    {
        Console.WriteLine("1");
        var task = MyMethod();        
        Console.WriteLine("2");
 
        await task;
    }
    
    async static Task MyMethod()
    {
        Console.WriteLine("start");
        await System.Threading.Tasks.Task.Delay(1000);
        Console.WriteLine("end");
    }
Добавлено через 43 секунды
На ранних версиях можно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    public static void Main()
    {
        Console.WriteLine("1");
        var task = MyMethod();        
        Console.WriteLine("2");
 
        task.Wait();
    }
    
    async static Task MyMethod()
    {
        Console.WriteLine("start");
        await System.Threading.Tasks.Task.Delay(1000);
        Console.WriteLine("end");
    }
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.03.2018, 11:29

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

Дождаться запуска Task
Необходимо дождаться запуска Task. Делаю так: //Wait for task to start (block) ...

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

Как использовать Thread.Sleep(5000), ошибка: "Элемент "Thread" не существует в текущем контексте"
я так понимаю, что Thread.Sleep(5000); это "тормоз" процесса выполенения программы на 5 сек? А...

Thread.Sleep
Итак, есть примерно вот такой консольный код: static void Main(string args) { ...


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

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

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