public async Task DownloadCollectionAsync(params string[] Uris) { using (var file = new FileObjectCollection(Uris)) { for (int i = 0; i < Uris.Length; i++) { var temp = file[Uris[i]]; temp.Tag = i; _table.AddRow(temp.Name, 0, 0, temp.Status, 0, 0); } file.FileDownloaded += File_FileDownloaded; file.FileSaved += File_FileSaved; file.FileDownloading += File_FileDownloading; file.FileSaving += File_FileSaving; Task t1 = file.DownloadAndSaveAsync(true); Task t2 = Task.Factory.StartNew(async() => { while (!(t1.IsCompleted)) { Console.Clear(); Console.SetCursorPosition(0, 0); Console.WriteLine(_table.ToStringAlternative()); await Task.Delay(1000); } }); await Task.Factory.StartNew(async() => { await Task.WhenAll(t1, t2).ContinueWith(async(t) => { await Task.Delay(100); Console.Clear(); Console.SetCursorPosition(0, 0); Console.WriteLine(_table.ToStringAlternative()); Console.WriteLine("Finished!"); }); }); } }