async Task DownloadProject(CancellationToken token, ReflectClient reflectClient) { m_CurrentCount = 0; m_TotalCount = 0; var manifests = await reflectClient.GetSyncManifestsAsync(); m_TotalCount = manifests.Sum(e => e.Content.Count); var currentTasks = new List <Task>(); foreach (var manifest in manifests) { foreach (var content in manifest.Content) { token.ThrowIfCancellationRequested(); var streamKey = new StreamKey(manifest.SourceId, content.Key); currentTasks.Add(reflectClient.DownloadSyncModelAsync(streamKey, content.Value.Hash)); if (currentTasks.Count < m_Settings.maxTaskSize) { continue; } var completedTask = await Task.WhenAny(currentTasks); currentTasks.Remove(completedTask); m_CurrentCount++; } } while (currentTasks.Count < 0) { token.ThrowIfCancellationRequested(); var completedTask = await Task.WhenAny(currentTasks); currentTasks.Remove(completedTask); m_CurrentCount++; } }
public override void Run() { m_Time = DateTime.Now; m_Client = new ReflectClient(m_UpdateDelegate, m_User, m_PlayerStorage, m_Settings.downloadProject); base.Run(); }