Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
23 / 39 / 14
Регистрация: 27.03.2014
Сообщений: 754
1

Аналог Thread.Sleep в Task

07.08.2014, 17:08. Показов 3398. Ответов 2
Метки нет (Все метки)

Имеется пример который запускает пару потоков с задержкой.
Кликните здесь для просмотра всего текста
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
 
class DemoTask
{
 
    // A method to be run as a task. 
    static void MyTask()
    {
        Console.WriteLine("MyTask() #" + Task.CurrentId + " starting");
 
        for (int count = 0; count < 10; count++)
        {
            Thread.Sleep(500);
            Console.WriteLine("In MyTask() #" + Task.CurrentId +
                              ", count is " + count);
        }
 
        Console.WriteLine("MyTask #" + Task.CurrentId + " terminating");
    }
 
    static void Main()
    {
 
        Console.WriteLine("Main thread starting.");
 
        // Construct two tasks. 
        Task tsk = new Task(MyTask);
        Task tsk2 = new Task(MyTask);
 
        // Run the tasks. 
        tsk.Start();
        tsk2.Start();
 
        Console.WriteLine("Task ID for tsk is " + tsk.Id);
        Console.WriteLine("Task ID for tsk2 is " + tsk2.Id);
 
        // Suspend Main() until both tsk and tsk2 finish. 
        tsk.Wait();
        tsk2.Wait();
 
        Console.WriteLine("Main thread ending.");
        Console.ReadKey();
    }
}


Проблема в том, что при запуске его вместо ПК на WP 8.1 урезаный sdk не содержит пространство классов Thread, здесь они заменены на Task принудительно((
Если короче то копилятор жалуется на строчку:
C#
1
Thread.Sleep(500);
подскажите пожалуйста аналог этого метода в тасках
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.08.2014, 17:08
Ответы с готовыми решениями:

Дождаться выполнения Task без Thread.Sleep?
using System; public class Test { public static void Main() { Console.WriteLine(&quot;1&quot;);...

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

Аналог Task.Wait для Thread
В тасках розпаралеленно следующим образом: Task testlong = new Task(longTest); ...

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

2
184 / 156 / 70
Регистрация: 02.10.2011
Сообщений: 621
07.08.2014, 17:18 2
C#
1
Task.delay ?
0
23 / 39 / 14
Регистрация: 27.03.2014
Сообщений: 754
07.08.2014, 17:34  [ТС] 3
Уже нашел! блин еще думал об Task.Delay, но видимо без await он не притормаживал)
C#
1
await Task.Delay(500);
Добавлено через 14 минут
Всетаки код работает неодинакого(( По времени отрабатывает почти точно, а вот по результату не радует винпфон((
Вот сравните выводы, ПК:
Кликните здесь для просмотра всего текста
Main thread starting.
Task ID for tsk is 1
Task ID for tsk2 is 2
MyTask() #2 starting
MyTask() #1 starting
In MyTask() #2, count is 0
In MyTask() #1, count is 0
In MyTask() #2, count is 1
In MyTask() #1, count is 1
In MyTask() #2, count is 2
In MyTask() #1, count is 2
In MyTask() #2, count is 3
In MyTask() #1, count is 3
In MyTask() #2, count is 4
In MyTask() #1, count is 4
In MyTask() #2, count is 5
In MyTask() #1, count is 5
In MyTask() #2, count is 6
In MyTask() #1, count is 6
In MyTask() #2, count is 7
In MyTask() #1, count is 7
In MyTask() #2, count is 8
In MyTask() #1, count is 8
In MyTask() #2, count is 9
MyTask #2 terminating
In MyTask() #1, count is 9
MyTask #1 terminating
Main thread ending.


Пфон:
Кликните здесь для просмотра всего текста
Task ID for tsk is 1
MyTask() #1 starting
Task ID for tsk2 is 2
MyTask() #2 starting
Main thread ending.
In MyTask() #, count is 0
In MyTask() #, count is 0
In MyTask() #, count is 1
In MyTask() #, count is 1
In MyTask() #, count is 2
In MyTask() #, count is 2
In MyTask() #, count is 3
In MyTask() #, count is 3
In MyTask() #, count is 4
In MyTask() #, count is 4
In MyTask() #, count is 5
In MyTask() #, count is 5
In MyTask() #, count is 6
In MyTask() #, count is 6
In MyTask() #, count is 7
In MyTask() #, count is 7
In MyTask() #, count is 8
In MyTask() #, count is 8
In MyTask() #, count is 9
MyTask # terminating
In MyTask() #, count is 9
MyTask # terminating


Почему он так себя ведет?
на точках останова видно что Task.CurrentId = null, да и по логам видно что почти сразу вернул Main thread ending
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2014, 17:34

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

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

Thread.Sleep и lock
Что будет если вызвать Thread.Sleep() внутри блока кода lock?

Thread.Sleep не работает
Всем привет! Задача такая есть таймер который запускается каждый 30 сек и делает рассылку и...

ProgressBar связать с thread.sleep
как получать progressbar.Value в случае когда стоит задержка в 10 секунд и надо в прогресс бар...


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

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

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