Re[12]: .NET5 и CER
От: _NN_ www.nemerleweb.com
Дата: 23.11.20 15:18
Оценка:
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Danchik, Вы писали:



D>>Ну вот и подумай, остановить ты можешь только managed поток, поставь там проверку на cancellationtoken и все дальше будет работать. Я интуитивно никогда Thread.Abort не пользовался. Это тот случай когда нужно пару раз подумать нужны ли его сайд эффекты из-за того что в свое время поленились поставить проверки.


S>Научи. Есть неуправляемая функция в основном UI потоке которая зависает.

S>cancellationtoken например в .Net 3.5 нет

Можете не благодарить https://www.nuget.org/packages/TaskParallelLibrary/

Другой вопрос почему мы говорим о .NET 3.5 когда есть .NET Core , который прекрасно работает на Windows 7.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[12]: .NET5 и CER
От: Danchik Украина  
Дата: 23.11.20 15:29
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Danchik, Вы писали:



D>>Ну вот и подумай, остановить ты можешь только managed поток, поставь там проверку на cancellationtoken и все дальше будет работать. Я интуитивно никогда Thread.Abort не пользовался. Это тот случай когда нужно пару раз подумать нужны ли его сайд эффекты из-за того что в свое время поленились поставить проверки.


S>Научи. Есть неуправляемая функция в основном UI потоке которая зависает.

S>cancellationtoken например в .Net 3.5 нет

CancellationToken это флаг. Создай себе по подобию и проверяй не установили ли его.

S> Покажи код. Буду благодарен


S>Мой код такого плана https://docs.microsoft.com/ru-ru/dotnet/api/system.threading.threadabortexception?view=net-5.0


Опять же у вас неуправляемая функция. Thread.Abort в неуправляемой функции не вызовится никогда, .NET не знает на чем там сейчас крутится функция, может на диск пишет или память освобождает. Он сработает как только когды вы из нее выйдете и попадете в управляемую среду — нафига тогда этот Abort?
Re[13]: .NET5 и CER
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 23.11.20 15:51
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Здравствуйте, Serginio1, Вы писали:


S>>Здравствуйте, Danchik, Вы писали:



D>>>Ну вот и подумай, остановить ты можешь только managed поток, поставь там проверку на cancellationtoken и все дальше будет работать. Я интуитивно никогда Thread.Abort не пользовался. Это тот случай когда нужно пару раз подумать нужны ли его сайд эффекты из-за того что в свое время поленились поставить проверки.


S>>Научи. Есть неуправляемая функция в основном UI потоке которая зависает.

S>>cancellationtoken например в .Net 3.5 нет

_NN>Можете не благодарить https://www.nuget.org/packages/TaskParallelLibrary/

Спасибо!
_NN>Другой вопрос почему мы говорим о .NET 3.5 когда есть .NET Core , который прекрасно работает на Windows 7.

Например xp еще есть у клиентов. Ну опять же куда мне cancellationtoken прикрутить к основному потоку?
И где мне вызвать Cancel(); если функция зависла?

Мне бы примерчик, как прервать неуправляемую функцию которая привязана к UI потоку?
и солнце б утром не вставало, когда бы не было меня
Re[13]: .NET5 и CER
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 23.11.20 15:52
Оценка:
Здравствуйте, Danchik, Вы писали:


S>> Покажи код. Буду благодарен


S>>Мой код такого плана https://docs.microsoft.com/ru-ru/dotnet/api/system.threading.threadabortexception?view=net-5.0


D>Опять же у вас неуправляемая функция. Thread.Abort в неуправляемой функции не вызовится никогда, .NET не знает на чем там сейчас крутится функция, может на диск пишет или память освобождает. Он сработает как только когды вы из нее выйдете и попадете в управляемую среду — нафига тогда этот Abort?


А мне не надо перехватывать в неуправляемой функции.
Мне нужно прервать выполнение этой функции в управляемом основном потоке по таймауту.
и солнце б утром не вставало, когда бы не было меня
Re[12]: .NET5 и CER
От: Ночной Смотрящий Россия  
Дата: 23.11.20 16:59
Оценка: 20 (1)
Здравствуйте, Serginio1, Вы писали:

S>cancellationtoken например в .Net 3.5 нет


https://github.com/theraot/Theraot/blob/master/Framework.Core/System/Threading/CancellationToken.cs
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[13]: .NET5 и CER
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 23.11.20 17:42
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Serginio1, Вы писали:


S>>cancellationtoken например в .Net 3.5 нет


НС>https://github.com/theraot/Theraot/blob/master/Framework.Core/System/Threading/CancellationToken.cs

Спасибо!
И как мне с его помощью прервать выполнение неуправляемой функции в основном потоке?

Везде в примерах нужно опросить CancellationToken на ct.IsCancellationRequested
Либо вызвать CancellationTokenSource Cancel для установи исключения.
Как эти мне снять выполнение зависшей функции.
Я уже у всех прошу решения. Никто так и не показал
и солнце б утром не вставало, когда бы не было меня
Re[14]: .NET5 и CER
От: _NN_ www.nemerleweb.com
Дата: 23.11.20 18:03
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S>Везде в примерах нужно опросить CancellationToken на ct.IsCancellationRequested

S>Либо вызвать CancellationTokenSource Cancel для установи исключения.
S> Как эти мне снять выполнение зависшей функции.
S> Я уже у всех прошу решения. Никто так и не показал

Автоматически как в случае с Thread.Abort думаю нет способа.
Надо посмотреть как в .NET Framework реализовано и что происходить в .NET Core в этом же месте.

Самый надёжный вариант это вручную проставлять все места возврата из неуправляемого кода.
Полагаю этого хочется и избежать.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[15]: .NET5 и CER
От: _NN_ www.nemerleweb.com
Дата: 23.11.20 20:16
Оценка:
Здравствуйте, _NN_, Вы писали:

В принципе можно динамически или статически сгенерировать обёртку для COM интерфейса которая будет проверять CancellationToken после каждого вызова и кидать исключение об отмене.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[12]: .NET5 и CER
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.11.20 01:51
Оценка:
Здравствуйте, Serginio1, Вы писали:
S> То есть мой код продолжает работать, вместо того что бы намертво зависнуть.
S>Ну не получилось выполнить и хрен с ним.
S>Что неправильно работает?
Вы думаете, что прерываете вызов во время неуправляемого кода. А на самом деле нет. То, что ваш код не зависает намертво — случайность.
S>Код такого плана
S>Мой код такого плана https://docs.microsoft.com/ru-ru/dotnet/api/system.threading.threadabortexception?view=net-5.0
Перепишите его.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[14]: .NET5 и CER
От: Петрухин Эдуард Россия  
Дата: 24.11.20 06:59
Оценка: 10 (1)
Здравствуйте, Serginio1, Вы писали:

S> Мне бы примерчик, как прервать неуправляемую функцию которая привязана к UI потоку?


Может быть, вот эта статья поможет: Задачи и отмена в .Net — tips &amp; tricks.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[13]: .NET5 и CER
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.11.20 07:08
Оценка:
Здравствуйте, Sinclair, Вы писали:


S>>Мой код такого плана https://docs.microsoft.com/ru-ru/dotnet/api/system.threading.threadabortexception?view=net-5.0

S>Перепишите его.

Ну приведи пример, что бы не случайно работало.

код типа такого

public static void DoWork() {
        try {
            callUnmagedCode(); // вот этот код зависает причем в основном потоке
            }
        }
        catch(ThreadAbortException e) {
   
            Thread.ResetAbort();
        }
 
    }


Тут кода то с гулькин ..
и солнце б утром не вставало, когда бы не было меня
Re[15]: .NET5 и CER
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.11.20 07:29
Оценка:
Здравствуйте, Петрухин Эдуард, Вы писали:

ПЭ>Здравствуйте, Serginio1, Вы писали:


S>> Мне бы примерчик, как прервать неуправляемую функцию которая привязана к UI потоку?


ПЭ>Может быть, вот эта статья поможет: Задачи и отмена в .Net — tips &amp; tricks.

Спасибо! Это я все читал давным давно.
Мне примерчик. Сейчас типа такого

public static void DoWork() {
        try {
            callUnmagedCode(); // вот этот код зависает причем в основном потоке
            }
        }
        catch(ThreadAbortException e) {
   
            Thread.ResetAbort();
        }
 
    }


Все смеются надомной, но я то всего навсего прошу пример, как такую ситуацию разрулить причем в основном потоке
и солнце б утром не вставало, когда бы не было меня
Re[14]: .NET5 и CER
От: Ночной Смотрящий Россия  
Дата: 24.11.20 07:51
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> И как мне с его помощью прервать выполнение неуправляемой функции в основном потоке?


Никак. Ровно как и в случае Thread.Abort.

S> Я уже у всех прошу решения. Никто так и не показал


Дотнет так устроен, что безопасно отменить работу произвольной функции без поддержки этого в самой функции нельзя из-за особенности работы статических конструкторов.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[15]: .NET5 и CER
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.11.20 08:01
Оценка: -1
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Serginio1, Вы писали:


S>> И как мне с его помощью прервать выполнение неуправляемой функции в основном потоке?


НС>Никак. Ровно как и в случае Thread.Abort.



S>> Я уже у всех прошу решения. Никто так и не показал


НС>Дотнет так устроен, что безопасно отменить работу произвольной функции без поддержки этого в самой функции нельзя из-за особенности работы статических конструкторов.

Мне не интересно безоапасно. Мне нужно прервать зависшую функцию или перезапустить приложение (если надо сериализовать данные), а не грохать полностью приложение через диспетчер задач

Thread.Abort позволяет это сделать, а вот всякие CancellationToken нет.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 24.11.2020 8:49 Serginio1 . Предыдущая версия .
Re[16]: .NET5 и CER
От: Ночной Смотрящий Россия  
Дата: 24.11.20 09:04
Оценка:
Здравствуйте, Serginio1, Вы писали:

НС>>Дотнет так устроен, что безопасно отменить работу произвольной функции без поддержки этого в самой функции нельзя из-за особенности работы статических конструкторов.

S> Мне не интересно безоапасно. Мне нужно прервать зависшую функцию

И пофик что остальное приложение сломается?

S> или перезапустить приложение


Ну так перезапускай. Process.Exit никто не отменял.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[14]: .NET5 и CER
От: Danchik Украина  
Дата: 24.11.20 09:20
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

S>Здравствуйте, Sinclair, Вы писали:



S>>>Мой код такого плана https://docs.microsoft.com/ru-ru/dotnet/api/system.threading.threadabortexception?view=net-5.0

S>>Перепишите его.

S> Ну приведи пример, что бы не случайно работало.


S>код типа такого


S>
S>public static void DoWork() {
S>        try {
S>            callUnmagedCode(); // вот этот код зависает причем в основном потоке
S>            }
S>        }
S>        catch(ThreadAbortException e) {
   
S>            Thread.ResetAbort();
S>        }
 
S>    }
S>


S>Тут кода то с гулькин ..


Такие дела делаются внешиними процесами. Стартуется еще один EXE с параметрами, на выход он должен дать результат. Если процес не завершил работу вовремя — прибиваем его. Только так вы не угробите свое рабочее приложение.

Также можно стартануть такой процес как RPC сервер, чтобы не плодить параметров. И рестартовать его когда надо.
Re[17]: .NET5 и CER
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.11.20 09:23
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Serginio1, Вы писали:


НС>>>Дотнет так устроен, что безопасно отменить работу произвольной функции без поддержки этого в самой функции нельзя из-за особенности работы статических конструкторов.

S>> Мне не интересно безоапасно. Мне нужно прервать зависшую функцию

НС>И пофик что остальное приложение сломается?

Оно не ломается.
S>> или перезапустить приложение

НС>Ну так перезапускай. Process.Exit никто не отменял.

А сохранить данные? Память то не ломается. Ломается то, что в блоке try catch
Пересоздам все что нужно.
и солнце б утром не вставало, когда бы не было меня
Re[18]: .NET5 и CER
От: Ночной Смотрящий Россия  
Дата: 24.11.20 09:26
Оценка:
Здравствуйте, Serginio1, Вы писали:

НС>>И пофик что остальное приложение сломается?

S> Оно не ломается.

Это вероятностный момент.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[15]: .NET5 и CER
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.11.20 09:27
Оценка:
Здравствуйте, Danchik, Вы писали:
S>>Тут кода то с гулькин ..

D>Такие дела делаются внешиними процесами. Стартуется еще один EXE с параметрами, на выход он должен дать результат. Если процес не завершил работу вовремя — прибиваем его. Только так вы не угробите свое рабочее приложение.


D>Также можно стартануть такой процес как RPC сервер, чтобы не плодить параметров. И рестартовать его когда надо.


Значит примера не будет. Ну то есть отдельный процесс плодить. Доменов то в Core тоже нет.
Еще раз ломается то, что находится в try catch. А его легко восстановить.
Да и трудоемко выводить весь код а отдельный процесс, когда куча взаимосвязей. И это проблема возникает раз в пятилетку
и солнце б утром не вставало, когда бы не было меня
Отредактировано 24.11.2020 9:29 Serginio1 . Предыдущая версия .
Re[19]: .NET5 и CER
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.11.20 09:30
Оценка: :)
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Serginio1, Вы писали:


НС>>>И пофик что остальное приложение сломается?

S>> Оно не ломается.

НС>Это вероятностный момент.

Что может сломаться вне блока try catch?
и солнце б утром не вставало, когда бы не было меня
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.