protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { ChannelUpdateTask channelUpdateTask = await _channelUpdateTaskUnloader.Dequeue(); IEnumerable <Track> tracks = (await Task.WhenAll(channelUpdateTask.NewMediaUrls.Select(_youTubeService.ExtractYouTubeVideos))) .SelectMany(videoArray => videoArray.Select(video => video.ToTrack())); using (IServiceScope serviceScope = _serviceProvider.CreateScope()) { IChannelTrackRepository channelTrackRepository = serviceScope.ServiceProvider.GetService <IChannelTrackRepository>(); await channelTrackRepository.AddNewTracks(channelUpdateTask.ChannelId, tracks); IChannelRepository channelRepository = serviceScope.ServiceProvider.GetService <IChannelRepository>(); await channelRepository.UpdateChannelNotEditing(channelUpdateTask.ChannelId); Channel channel = channelRepository.GetChannelByIdOrDefault(channelUpdateTask.ChannelId); IChannelUpdatedNotifierHubProxy channelUpdatedNotifierHubProxy = serviceScope.ServiceProvider.GetService <IChannelUpdatedNotifierHubProxy>(); await channelUpdatedNotifierHubProxy.NotifyChannelUpdated(channel.OwnerId, channel); } } }
public void Enqueue(ChannelUpdateTask channelUpdateTask) { _updateTaskQueue.Enqueue(channelUpdateTask); }