Обтекание синхронного метода для асинхронного запуска - PullRequest
0 голосов
/ 30 мая 2018

Меня могут проголосовать за дубликат

упаковка-синхронный код-в-асинхронный вызов

Однако, мой вопрос, что если я незаботиться о результатах задачи?

Подробнее: я хочу, чтобы задача выполнялась, и независимо от того, завершается она или нет, я хочу, чтобы она снова запускалась в другом потоке.

Чтобы пояснить конкретно, у меня есть служба, которая читает таблицу и получает все записи, которые не были обработаны.Задача делает свое дело, но я не знаю, есть ли одна запись или 1000 записей для обработки в этом случае.Если это 1000, это займет несколько минут, одна займет меньше секунды, обычно задача не находит ничего общего.Поэтому в этом случае мне не нужно ни знать результаты предыдущего задания, ни ждать его завершения.

Я прочитал в асинхронном режиме, и если я не использую результат ожидания, я прочитаю, что он будетне продолжатьЭто правда?

Пример:

private async Task MakeRequest()
{
    mainTimer.Stop();
   var task = Task.Run(() => Exec());
   await task;
   mainTimer.Start();
}

означает ли это, что задача не готова к повторному запуску, если у меня нет команды "await task"?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

задача ожидания;

Указывает, что вы хотите дождаться завершения задачи и продолжить выполнение следующих строк.

Когда вы запустите это:

Task.Run (() => Exec ());

Он начнет выполнять новое задание немедленно,Неважно, использовали ли вы , ждите или нет.Вы можете запускать одну и ту же функцию в задаче столько раз, сколько захотите, не используя ключевое слово await .Но вам нужно убедиться, что ваша функция может обрабатывать параллельное выполнение.

Если вам нужно получить результат вашей задачи без использования await, вы можете продолжить выполнение в том же потоке, в котором была запущена задача:

task.ContinueWith (task => {});

0 голосов
/ 30 мая 2018

если вас не волнует результат, используйте функцию void:

private async void MakeRequest()
{
   mainTimer.Stop();
   var task = Task.Run(() => Exec());
   await task;
   mainTimer.Start();
}

Кроме того, если не использовать задачу, она ничего не блокирует, она завершится, даже если вы ее не ждете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...