|
Прибить таск
|
|||
---|---|---|---|
#18+
Запускаю в таске синхронную операцию, чтобы не блокировала интерфейс. Расхотелось дожидаться ее завершения, хочу прибить. В таске вызывается посторонний долгий метод, то есть способ проверять состояние токена как здесь не канает, а Task.Dispose тупо валит всё приложение. Можно ли его прибить, чтобы посторонний метод прекратил работу и не сделал то, что должен? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 21:30 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Antonariy, можно код посмотреть, в котором таску нельзя через CancellationToken отменить? Как костыль, но рабочий возможно подойдет TaskCompletionSource. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 21:35 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Ну например такой: Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 21:41 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
vb_sub Antonariy, можно код посмотреть, в котором таску нельзя через CancellationToken отменить? Как костыль, но рабочий возможно подойдет TaskCompletionSource. Чтобы "прибить" таску через CancellationToken надо чтобы таска сама проверила его состояние. Токен это просто сигнал для таски, что, давай, типа, закругляйся, не нужна ты уже. А TaskCompletionSource он тоже не для того. Он чтобы создавать таски с "кастомной" асинхронностью. Например завершением таска по какому-то событию, приходом сообщения, и т.п. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 21:52 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Antonariy посторонний долгий метод ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 22:04 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Shocker.Pro этот посторонний метод отмену поддерживает? Судя по автор способ проверять состояние токена как здесь не канает,не поддерживает. Я так исходный посыл понял, что проблема как раз в этом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 22:09 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
По ссылке, кстати, написано гамно: Код: c# 1. 2. 3. 4. 5.
потому что при отмене таска положено ексепшен бросать, а не завершать его ретурном. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 22:12 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
fkthat Судя по автор способ проверять состояние токена как здесь не канает, ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 22:19 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Shocker.Pro Antonariy посторонний долгий метод Вок как снимаешь задачу через диспетчер задач, так же с таском. Таск же поток создает, если я не ошибаюсь? Вот нужно просто замочить поток по беспределу, такому же, как задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 22:26 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Antonariy Не поддерживает и никак не узнает. Значит, задача нерешаемая, потому что Antonariy Таск же поток создает ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 22:37 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Shocker.Pro я имею ввиду не поддержку CancellationToken-а, а какой-то иной способ. Иначе какой смысл знать, что у тебя что-то отменено, если ты не можешь отменить вызванный метод. Может он вообще WinAPI дергает ) Ну, наверное, автор имел в виду аналог Thread.Abort , но для тасков. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 22:39 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
fkthat Antonariy Не поддерживает и никак не узнает. Значит, задача нерешаемая, потому что Antonariy Таск же поток создает А Thread? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 23:14 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
fkthat Shocker.Pro я имею ввиду не поддержку CancellationToken-а, а какой-то иной способ. Иначе какой смысл знать, что у тебя что-то отменено, если ты не можешь отменить вызванный метод. Может он вообще WinAPI дергает ) Ну, наверное, автор имел в виду аналог Thread.Abort , но для тасков. Где-то прочитал, что Thread.Abort deprecated, таки он уже всё наверное? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 23:15 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Antonariy, единственный надежный способ убить задачу, которая не поддерживает отмену и вы не можете изменить код - это создать отдельный процесс и выполнять задачу в этом процесс, при создании вы получите идентификатор процесса, по этому идентификатору можно убить процесс, вместе с этим ОС освободит все ресурсы автоматически. Если вы даже создадите отдельный поток и запустите в нем ваш задачу, и если вызовите Thread.Abort, то не факт, что поток остановится, Thread.Abort тоже выставляет спец. флаг, который проверяют некоторые системные функции, и если флаг выставлен, то бросается исключение, но если даже ваша задача вызывает те системные функции, которые проверяют флаг и бросают исключение, то ресурсы, которые получила ваша задача для выполнения могут быть не освобождены, поэтому только отдельный процесс. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2020, 23:21 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
AvaiatorNester поэтому только отдельный процесс. Не вариант. Придется терпеть исполняемые таски, пока не закончат работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 00:02 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Antonariy, Какой-то варварский способ. Зачем это всё? )) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 00:08 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Antonariy Где-то прочитал, что Thread.Abort deprecated, таки он уже всё наверное? Да, проверил, он всё. В Core и 5 он уже и не работает - сам кидает ексепшен. Я и не знал - не могу просто вспомнить, чтобы он мне когда-либо нужен был. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 02:10 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Можно завернуть этот неотменяемый Task в другой Task на основе TaskCompletionSource, для которого CancellationToken будет вызывать TrySetCanceled внутри Register, и возвращать первый выполненный Task. Этот длинный неотменяемый Task не отменится, и будет работать где-то там фоном, но на уровне кода вполне будет, как будто его отменили. Если не жалко ресурсов, которые потребляет этот неотменяемый Task, то вполне можно сделать так. Детали есть, например, здесь . ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 07:54 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
hVostt Antonariy, Какой-то варварский способ. Зачем это всё? )) С другой стороны, сторонний метод сторонний лишь формально, он в соседнем проекте в солюшене. Внутри него на самом нижнем уровне - долгий async/await-запрос через HttpRequest. Может можно до него пробросить какой-нибудь обьект, который прервет запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 07:54 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Antonariy долгий async/await-запрос через HttpRequest. Может можно до него пробросить какой-нибудь обьект, который прервет запрос? https://stackoverflow.com/questions/19211972/getresponseasync-does-not-accept-cancellationtoken - ? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 08:00 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Сон Веры Павловны Antonariy долгий async/await-запрос через HttpRequest. Может можно до него пробросить какой-нибудь обьект, который прервет запрос? https://stackoverflow.com/questions/19211972/getresponseasync-does-not-accept-cancellationtoken - ? Блин, у людей столько проблем с этим WebRequest и подобным legacy, но все равно все упорно продолжают грызть кактус вместо того чтобы использовать HttpClient. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 08:29 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Antonariy он в соседнем проекте в солюшене Antonariy через HttpRequest Antonariy пробросить какой-нибудь ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 10:02 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
убить можно только поток или процесс, но делать этого нельзя, за такое нужно бить по рукам. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 12:35 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Antonariy Ну например такой: Код: c# 1. 2.
ваш пример ужасен, у Task.Delay есть аргумент для CancellationToken'а, лучше вообще забыть про Thread.Sleep и вообще про класс в целом ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 12:39 |
|
Прибить таск
|
|||
---|---|---|---|
#18+
Shocker.ProЭто не сторонний код.Я специально так сформулировал задачу в надежде на существование решения в этом виде. Shocker.Proнужно просто сделать всю цепочку вызова асинхроннойМного еботни, ее изначально не планировали делать с возможностью отмены запросов, поэтому я хотел объехать на кривой кобыле. Не судьба. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2020, 12:42 |
|
|
start [/forum/topic.php?fid=20&msg=40022281&tid=1398416]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 266ms |
total: | 410ms |
0 / 0 |