Есть некий класс с парсером поисковой системы.
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 чаще всего выполнение метода будет заканчиваться ошибкой и бОльшая часть времени будет уходить на создание новых объектов а не на полезную работу.
awaitздесьh.GetSnippetHttpClientAsync. Метод возвращаетTaskи вы его теряете. Создайте список тасок, потомawait Task.WhenAllему сделаете, чтобы дождаться завершения работы после отмены токена. Иначе возникшие необработанные исключения уйдут в бездну, и вы не узнаете об ошибках. – aepot Nov 12 '23 at 20:00awaitэто равносильноasync void- то есть ничего хорошего. Вот еще примеры https://ru.stackoverflow.com/q/1303748/373567 – aepot Nov 12 '23 at 20:04