Почему Task.Run () в службе Windows OnStart () приводит к отказу службы остановить?

Оказывается, вы можете создать уникальный столбец с несколькими столбцами в базе данных доступа MS, но это немного сумасшествие, если вы хотите сделать это через графический интерфейс. Существует также ограничение; вы можете использовать только 10 столбцов на индекс.

В любом случае, вот как вы создаете уникальный уникальный столбец с несколькими столбцами в базе данных доступа MS.

  1. Откройте таблицу в режиме разработки , и Design, выберите Indexes.
  2. Создайте новую строку и введите значение в ячейке Index Name,
  3. Выберите первый столбец из выпадающего меню.
  4. Добавьте новую строку и оставьте поле «Название индекса» пустым.
  5. Выберите второй столбец и т. д.

Вот как это должно выглядеть:

0
задан Josh Gust 27 February 2019 в 22:27
поделиться

1 ответ

Это скорее всего потому, что у вас либо нет метода отмены, либо внутри DoWork() есть подпроцессы, которые все еще работают, когда вы вызываете Cancel(). Как сказал @Damien_The_Unbeliever, отмена - это совместная задача.

Когда вы вызываете _cancelTokenSource.Cancel(), если вы не зарегистрировали функцию обратного вызова, все, что происходит, это то, что булево значение isCancellationRequested установлено в true, тогда метод DoWork() отвечает за его просмотр и остановку его выполнения. свой. Здесь есть недостаток, хотя, как вы, вероятно, можете сказать, что если у вас есть трудоемкий цикл, выполняющийся в задаче DoWork() при вызове Cancel(), то этот цикл должен завершить итерацию, прежде чем сможет проверить значение из isCancellationRequested, что может привести к зависанию.

Способ обойти это - вставить функции обратного вызова отмены в метод DoWork(), см. здесь и затем зарегистрировать их в токене, чтобы при вызове метода Cancel() ВСЕ из задачи, выполняющиеся в фоновом режиме, останавливаются, не ожидая их.

Надеюсь, это поможет!

0
ответ дан iggy12345 27 February 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: