Это может сработать для вас (GNU sed):
sed -n ':a;/regexp/{n;h;p;x;ba}' file
Использовать seds grep-like option -n
, и если текущая строка содержит требуемое regexp, замените текущую строку следующим, скопируйте эту строку в пространство удержания (HS), распечатать линию, поменять пространство шаблона (PS) для HS и повторить.
Task.WhenAll
немедленно возвращает новый Task
, он не блокируется. Возвращенная задача будет завершена, когда все задачи, переданные в WhenAll
, будут завершены.
Это асинхронный эквивалент Task.WaitAll
, и этот метод используется, если вы хотите для блокировки.
Однако у вас есть другая проблема. Использование Task.Factory.StartNew
и передача делегата async
, по-видимому, приводит к типу Task<Task>
, где внешняя задача завершается, когда внутренняя задача начинает выполняться (а не после ее завершения).
Использование нового Task.Run
позволяет избежать этого.
Task.Run
и всей его доброте (и почему и как он это делает), перейдите сюда: blogs.msdn.com/b/pfxteam/archive/2011/10/24/10229468. ASPX – ckozl 4 April 2013 в 21:14