static void Offline(List <Link> links, string path, Credential credential) { var count = 0; foreach (var link in links) { Console.Write("Adding " + link.name + " ... "); var list = Operation.QueryLinkFiles("magnet:?xt=urn:btih:" + link.hash, credential); if (!list.success) { Console.WriteLine("Query magnet link failed."); continue; } var res = Operation.AddOfflineTask("magnet:?xt=urn:btih:" + link.hash, path, credential, Enumerable.Range(1, list.files.Length).ToArray()); if (!res.success) { Console.WriteLine("Add offline task failed."); } else { Console.WriteLine("Success with rapid = " + res.rapid_download); } if (res.success && res.rapid_download == 0) { count++; if (count >= 5) { Console.Write("Too many concurrent tasks, wait 3 seconds ... "); Thread.Sleep(3000); var tasks = Operation.GetOfflineList(credential).tasks.Where(t => t.status != 0).ToArray(); if (tasks.Length > 0) { Console.Write("Abort incomplete tasks ... "); foreach (var task in tasks) { Operation.CancelOfflineTask(task.task_id, credential); } } count = 0; Console.WriteLine("Okay, move on."); } } } }