public override async Task <bool> DoWork() { using IServiceScope scope = _scopeFactory.CreateScope(); IVideoManagerService videoService = scope.ServiceProvider.GetRequiredService <IVideoManagerService>(); int thumbnailsAssigned = await videoService.AssignThumbnails(); int previewsAssigned = await videoService.AssignPreviews(); int durationsAssigned = await videoService.AssignDurations(); return(thumbnailsAssigned > 0 || previewsAssigned > 0 || durationsAssigned > 0); }
public override async Task <bool> DoWork() { using IServiceScope scope = _scopeFactory.CreateScope(); IVideoManagerService videoService = scope.ServiceProvider.GetRequiredService <IVideoManagerService>(); List <Video> videos = await videoService.GetVideosToEncode(_maxConcurrentTasks); if (videos.Count == 0) { return(false); } VideoManagerDbContext videoManagerDbContext = scope.ServiceProvider.GetRequiredService <VideoManagerDbContext>(); IEncoder encodingService = scope.ServiceProvider.GetRequiredService <IEncoder>(); List <Task <EncodeResult> > encodingTasks = new(videos.Count); foreach (Video video in videos) { encodingTasks.Add(encodingService.Encode(video)); video.Status = VideoStatus.Encoding; } await videoManagerDbContext.SaveChangesAsync(); for (int i = 0; i < encodingTasks.Count; i++) { Video video = videos[i]; EncodeResult encodeResult = await encodingTasks[i]; video.Status = encodeResult.Success ? VideoStatus.Ready : VideoStatus.Failed; video.EncodeTime = encodeResult.EncodeTime; video.EncodedLength = encodeResult.EncodedFileLength; } await videoManagerDbContext.SaveChangesAsync(); return(true); }