Как отменить или перезапустить задачу наследует список и ждет? - PullRequest
0 голосов
/ 21 апреля 2019

Я использую асинхронный метод для вызова API, чтобы получить список записей и заполнить список этими данными.Этот асинхронный метод я хочу вызывать каждые 120 секунд.На этом этапе необходимо отменить или перезапустить задачу, чтобы предотвратить утечку памяти, верно?Я не знаю, как отменить или перезапустить мою задачу.У вас есть идея, чтобы выяснить это?Вот мой метод:

public async Task GetChatters()
    {
        List<TwitchLib.Api.Core.Models.Undocumented.Chatters.ChatterFormatted> chatters = await api.Undocumented.GetChattersAsync(channelName);

        foreach (var chatter in chatters)
        {
            ListBoxViewerUpdate(chatter.Username);
        }

        await Task.Delay(TimeSpan.FromSeconds(viewerListUpdateTime));
        Task.Factory.StartNew(GetChatters);
    }

спасибо =)

1 Ответ

0 голосов
/ 21 апреля 2019

Вы не можете отменить «задачу», потому что ваш API не подлежит отмене.

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

Вы также должны использовать Task.Run вместо Task.Factory.StartNew с async-await.

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