|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Имеется таймер. По таймеру нужно проверять не запущена ли уже задача, если запущена, не делать ничего, если не запущена - запускать. Как это можно сделать правильно? (.net 4.0) Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 13:04 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Евгенич, Определить Task на уровне приложения-формы и проверять свойство IsCompleted ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 13:08 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Евгенич, Второй вариант- завести флаг в форму bool яПростаиваюИскучаю. Потоки флаг меняют. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 13:19 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Cat2Евгенич, Определить Task на уровне приложения-формы Так ведь task нельзя запускать вновь, можно лишь пересоздавать и запускать. Или я неправильно понял совет? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 13:41 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Евгенич, System.threading.Timer. И не надо более ничего. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 14:19 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Евгенич, его можно и не завершать :) но это плохая практика ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 14:53 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Petro123Евгенич, System.threading.Timer. И не надо более ничего. )) А он умеет выполнять назначенный ему код в отдельном потоке? (нужно чтобы основной поток не мерз). И кроме того метод, который я ему передам требует входной параметр. А в описании System.Threading.Timer говорят, что параметр передаваемого метода должен быть типа object - а у меня SQLConnection. Как его использовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 15:33 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Евгенич, У меня работает. Коннект внутри создай. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 15:44 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
ЕвгеничТак ведь task нельзя запускать вновь, можно лишь пересоздавать и запускать. Или я неправильно понял совет? Неправильно. В Вашем примере таск определен внутри timer_Tick и поэтому его нельзя проверить во время следующего входа в timer_Tick . В принципе так тоже можно , но надо как-то хранить Id процесса в какой-то глобальной переменной. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 18:09 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
ЕвгеничА в описании System.Threading.Timer говорят, что параметр передаваемого метода должен быть типа object - а у меня SQLConnection. Как его использовать? Просто сделать Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 18:11 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Хозяйке на заметку. Если надо передать много аргументов, то они передаются в виде структуры ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 18:13 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Евгенич, ВСЕ объекты в языке ООП CSharp унаследованы от типа Object. Если в качестве аргумента указан тип object, это значит, что можно передать совершенно любой объект Почитай, что такое Boxing\Unboxing. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2017, 18:53 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Cat2Неправильно. В Вашем примере таск определен внутри timer_Tick и поэтому его нельзя проверить во время следующего входа в timer_Tick . Сделал так: объявил tsk за пределами цикания таймера: Код: c# 1.
а затем Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Теперь ругачка Object Reference not set to an instance of an object ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2017, 08:06 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Евгенич, У драйвера бд работает пул коннектов. Соединение происходит мгновенно. Кроме того в поток нужен новый коннект. Т.е. передавать нет необходимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2017, 08:19 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
ЕвгеничСделал так: объявил tsk за пределами цикания таймера: Код: c# 1.
tsk изначально null, а ты это не проверяешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2017, 08:21 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Евгенич, Поигодится. Особенно, с Net 4.5 https://www.google.ru/url?sa=t&source=web&rct=j&url=https://dotnetcodr.com/2014/01/01/5-ways-to-start-a-task-in-net-c/amp/&ved=0ahUKEwjEnczCrMLXAhXMnBoKHf2TC7oQFgg_MAM&usg=AOvVaw0Kqy9OSQa_FZA4jz3ay-Si&cf=1 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2017, 08:34 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Petro123Евгенич, System.threading.Timer. И не надо более ничего. ))Надо. Он не проверяет завершённость предыдущего срабатывания. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2017, 08:54 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Алексей КPetro123Евгенич, System.threading.Timer. И не надо более ничего. ))Надо. Он не проверяет завершённость предыдущего срабатывания. Что там что тут нужен флаг. Только поток тот таймер делает сам. Т.е. код короче. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2017, 08:57 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Dima Ttsk изначально null, а ты это не проверяешь. Переделал, один фиг та же ошибка Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Подскажите как правильно, плиз! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2017, 09:29 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
А если так написать: Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2017, 09:36 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2017, 09:40 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
volatile можно убрать... ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2017, 09:43 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Petro123Алексей Кпропущено... Надо. Он не проверяет завершённость предыдущего срабатывания. Что там что тут нужен флаг.Да. :-) Petro123Только поток тот таймер делает сам. Т.е. код короче.Ну недостатки тоже есть. Если GUI приложение, то я бы использовал GUI-таймер. Если служба или консольное приложение, тогда Threading-таймер. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2017, 09:45 |
|
Запуск по таймеру не более одной Task
|
|||
---|---|---|---|
#18+
Алексей К Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
так не могу (task.run нету в .net 4.0) в принципе уже сделал сделал тупо через bool флаг. спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2017, 10:14 |
|
|
start [/forum/topic.php?fid=20&fpage=37&tid=1399614]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 310ms |
total: | 453ms |
0 / 0 |