Хорошо ли поменять темы на шаблон async-await? - PullRequest
0 голосов
/ 30 апреля 2019

Некоторое время назад я столкнулся с задачей, описанной ниже, проект использовал .net 4.0, и теперь я задаюсь вопросом, будет ли хорошо использовать async-await в такой ситуации, если есть такая возможность (метод запускаетсяПо делегату следует скачивать много файлов).Я читал разные статьи, чтобы прояснить свое любопытство, но не уверен, что у меня неправильные мысли.

 public static void StartBackgroundThread(ParameterizedThreadStart 
        threadstart, string name = "", object parameter = null)
    {
        if (ConcQueue.Count == 0)
        {
            ConcQueue.Enqueue(threadstart);
        }
        else
        {
            foreach (var element in ConcQueue)
            {
                if (element.Method.Name == threadstart.Method.Name)
                {
                    return;
                }
            }
        }

        if (!HasBackgroundThread)
        {
            HasBackgroundThread = true;
            try
            {
                ParameterizedThreadStart result;
                ConcQueue.TryDequeue(out result);
                _backgroundThread = new Thread(result) { Name = name };
               _backgroundThread.Start(parameter);
            }
            catch (Exception)
            {
                throw;
            }
        }
    }

как бы вы реорганизовали этот кусок кода с точки зрения потоков \ асинхронности?а ты бы?и лучше ли использовать async-await или threads?

1 Ответ

0 голосов
/ 07 мая 2019

как бы вы реорганизовали этот кусок кода с точки зрения потоков \ async? а ты бы?

Я бы рефакторинг кода, который использует этот код. Этот код тесно связан с типом Thread, и было бы сложно переписать его без переписывания вызывающего кода.

и лучше ли использовать async-await или threads?

async и темы совершенно разные. Сам тип Thread очень устарел и должен быть заменен более современными подходами (Parallel, пул потоков и т. Д.) Для всех случаев использования, кроме взаимодействия COM. Вопрос о том, использовать ли async или параллельный / пул потоков, зависит от того, что вы пытаетесь сделать; все, что связано с ЦП, может использовать параллельный / пул потоков, а операции ввода-вывода - async.

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