Я хочу непрерывно запускать поток. Этот поток будет опросить и проверить статус карты. Вот пример реализации:Использование задачи для непрерывной работы Thread
static void Main(string[] args)
{
var _cancelationTokenSource = new CancellationTokenSource();
new Task(() => chkRequestTask(_cancelationTokenSource), _cancelationTokenSource.Token, TaskCreationOptions.LongRunning).Start();
while (true)
{
}
}
static bool chkRequestTask(CancellationTokenSource _cancellationTokenSource)
{
bool noRequest = false;
while (!_cancellationTokenSource.Token.IsCancellationRequested)
{
var RequestTask = Task.Factory.StartNew(() => noRequest = chkRequestTask(_cancellationTokenSource), _cancellationTokenSource.Token);
if (noRequest)
{
_cancellationTokenSource.Token.WaitHandle.WaitOne(15000);
Console.WriteLine("Waiting for 15Seconds");
}
else
{
Console.WriteLine("Checking the card");
}
}
return noRequest;
}
То, что я хочу добиться здесь chkRequestTask
должен быть запущен в отдельном потоке. Это будет постоянно проверять статус карты. Для этого образца я просто делаю: Console.WriteLine("Checking the card");
.
Как только он проверяет состояние карты, он должен спать только на 15 секунд для этого образца (в общем, он должен проверять каждые 50 мс, но для целей тестирования я сохранял 15 секунд).
Но в приведенном выше образце он не спит, он просто дает мне Checking the card
непрерывно. Он не спит вообще на 15 секунд. Что не так с этим кодом?
Не хорошо: 'while (true) {}' Это будет всасывать все тактовые циклы процессора. –
Что вы пытаетесь сделать с этим статусом после опроса? вы хотите опросить, пока он не вернется? –
@SteveWellens. Просто делайте тест здесь. Это пример кода. удалит это из производственного кода. Моя главная задача - получить «chkRequestTask» в цикле в отдельном потоке, как показано в моем примере кода выше – user726720