Добрый день. У меня возникла следующая задача: я получаю список строк, после этого создаю экземпляр класса и вызываю в нём метод. На данный момент нужно сделать распараллеливание этого списка, то есть, обработка в разных потоках. Одновременно может выполняться определённое количество потоков. Как только один закончил - запускается следующий, и так до самого конца. Я бы сделал на Parallel.Foreach
, но проблема в том, что нужно сделать именно на async/await
. Информацию по ним я находил, но понять, как с ними работать, до конца не могу, ибо мне проще понимать чтением кода. Прошу помощи.
Например, должно сработать такое.
async Task ProcessTasks(IEnumerable<string> data, int maxParallelTasks)
{
var runningTasks = new HashSet<Task>();
foreach (var s in data) // цикл по всем строкам
{
// дождёмся, когда найдётся «место» для нового задания
while (runningTasks.Count >= maxParallelTasks)
{
// дождёмся окончания задания
var firstFinishedTask = await Task.WhenAny(runningTasks);
await firstFinishedTask; // доставим возможное исключение сюда
runningTasks.Remove(firstFinishedTask);
}
// стартуем новое задание
runningTasks.Add(Task.Run(() => ProcessData(s));
}
// дождёмся окончания всех запущенных заданий
foreach (var task in runningTasks)
await task;
}
Если отбросить жёсткое ограничение на количество одновременных заданий, и доверить планировку выполнения TPL, подойдёт более простой код:
var tasks = data.Select(s => Task.Run(() => ProcessData(s))).ToList();
await Task.WhenAll(tasks);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть 10 контролов, есть один errorproviderЕсли в контроле нет текста, появляется сообщение типа
В комментариях привёл ссылку,где отвечают на мой вопрос,но я не понимаю как он привязывает выбранную сущность в combobox к нужной сущности(Stelug...