oxzy's Modz uk Ответов: 1

Как работает taskdelay "секунды" в C#


привет, проект кода.

мне было интересно, как на самом деле работает taskdelay, и я использую кодирование на c#.

в основном я хочу знать, как работают секунды и как исправить их в правильном временном интервале между каждым вызовом функции..

например :

function1Call();
Task.Delay(600000);

function2Call()
Task.Delay(600000);


я хочу знать, как работает секундная стрелка и является ли это хорошим способом сделать это ?
я все еще учусь на c#, и это здорово, хотел бы получить некоторую помощь в этом, зная, как замедлить каждый список функций

спасибо

Что я уже пробовал:

thread. sleep(60000);

он ничего не сделал для меня просто пошел прямо через список функций

Patrice T

И поисковая система не давала ответов ?
Пора учиться гуглить

1 Ответов

Рейтинг:
10

OriginalGriff

Задача.Задержка и нить.Сон-это разные вещи: нить.Sleep приостанавливает текущий поток на определенное количество миллисекунд - в вашем примере он ждет одну минуту (==60 секунд == 60000 миллисекунд)
Задача.Задержка этого не делает, сама по себе она немедленно возвращается:

Stopwatch s = new Stopwatch();
s.Start();
Console.WriteLine("Before: " + s.ElapsedMilliseconds.ToString());
Task.Delay(3000);
Console.WriteLine("After:  " + s.ElapsedMilliseconds.ToString());
s.Stop();
Будет выводить:
Before: 0
After:  0
То, что он делает, - это создает новый поток, и он будет ждать вместо этого.
Если вы пытаетесь получить "разрыв"между функциями, то поток.Сон-это один из способов:
Stopwatch s = new Stopwatch();
s.Start();
Console.WriteLine("Before: " + s.ElapsedMilliseconds.ToString());
Thread.Sleep(3000);
Console.WriteLine("After:  " + s.ElapsedMilliseconds.ToString());
s.Stop();

Before: 0
After:  3002
Но - и это большое НО-нить.Сон означает, что во время ожидания задачи больше ничего не может произойти, включая любые обновления пользовательского интерфейса. Таким образом, кнопки не работают, метки и текстовые поля не меняются, ничего не происходит до тех пор, пока не истечет указанный вами период времени.

Если вы хотите использовать Task.Задержка, чтобы приостановить вашу нить, но все же делать что-то, тогда вам нужно выглядеть так, как await: ждут (Справочник по c# )[^] но есть хороший шанс, что это тоже не будет делать то, что вы хотите.

Что именно вы пытаетесь сделать?


Richard Deeming

Возможно, стоит уточнить, что это приблизительный количество миллисекунд. Он не возобновится раньше, чем пройдет это количество миллисекунд, но нет никакой гарантии, что он возобновится в определенный момент времени.

OriginalGriff

И что это в тиканье таймера, которое может составлять 15 мс - но так как он, кажется, хочет здесь задержки "человеческого масштаба", я не хотел слишком запутывать проблему.

oxzy's Modz uk

главное, что я хочу сделать, - это дать каждой функции 60 секунд временного пространства между собой .
я ищу простое решение этой проблемы

есть ли какой-нибудь другой способ сделать это или как лучше всего это сделать

OriginalGriff

Смотря-какая среда? WinForms, WPF, веб-сайт?

oxzy's Modz uk

извините за поздний ответ я использую winform