0

Есть некий класс с парсером поисковой системы.

public class Duckduckgo
{
     public async Task GetSnippetHttpClientAsync(CancellationToken token, SQLiteKeyRepository repository, int timeout, int pause)
    {
        while (!token.IsCancellationRequested)
        {
        var result = await ParseHttpAsync(repository, token, timeout, pause);
    }

}

 private async Task<string> ParseHttpAsync(SQLiteKeyRepository repository, CancellationToken token, int timeout, int pause)
{

    while (!token.IsCancellationRequested)
    {
      //тут логика парсера, если что то случается то проццес начинается с начала.
    }
    return null;

}



}

Запуск происходит вот так

 for (int i = 0; i < parseduckhttp; i++)
    {
     Duckduckgo h = new Duckduckgo();
     h.GetSnippetHttpClientAsync(token, repositoryKey, timeouthttp, pausehttp);                           
    }

Методы выполняются пока я не сделаю cancelTokenSource.Cancel();
И вот вопрос это вообще нормально выполнять такие теоретический бесконечные методы?
Можно было конечно для каждой задачи создавать свой объект и в нем 1 раз запускать метод, но я подумал что это сильно скажется на производительности, ведь объектов может быть и 300 чаще всего выполнение метода будет заканчиваться ошибкой и бОльшая часть времени будет уходить на создание новых объектов а не на полезную работу.

  • 3
    https://ru.stackoverflow.com/a/1257322/373567 не нужно проверять IsCancellationRequested в цикле, нужно чтобы используемый асинхронный метод это проверял. А так, на этот вопрос объективно ответить сложно. Если надо запускать что-то постоянно - запускайте, никто не против. Ошибка у вас только одна - где await здесь h.GetSnippetHttpClientAsync. Метод возвращает Task и вы его теряете. Создайте список тасок, потом await Task.WhenAll ему сделаете, чтобы дождаться завершения работы после отмены токена. Иначе возникшие необработанные исключения уйдут в бездну, и вы не узнаете об ошибках. – aepot Nov 12 '23 at 20:00
  • 3
    Вызов асинхронного метода без await это равносильно async void - то есть ничего хорошего. Вот еще примеры https://ru.stackoverflow.com/q/1303748/373567 – aepot Nov 12 '23 at 20:04
  • @aepot асинхронная пустота - нет ничего более поэтичного – Swift - Friday Pie Nov 12 '23 at 20:40

0 Answers0