public static async Task <IEnumerable <Guid?> > DetectFaceAsync(IFaceStream input) { await SimulateLowQoSNetworkAsync(); var random = Random.NextDouble(); if (random < .98) { return(Enumerable.Range(0, 1).Select(_ => (Guid?)Guid.NewGuid())); } else if (random < .99) { return(Enumerable.Range(0, 2).Select(_ => (Guid?)Guid.NewGuid())); } else { return(new Guid?[] { }); } }
public static async Task <IEnumerable <bool> > DetermineAccessAsync(IFaceStream input) { try { return(await DetectFaceAsync(input) .ContinueWith( task => task.Result .Where(faceId => faceId.HasValue) .Select(faceId => RecognizeFaceAsync(faceId.Value))) .ContinueWith( task => task.Result.AsCompleted() .Where(personId => personId.HasValue) .Select(personId => DetermineAccessAsync(personId.Value))) .ContinueWith( task => task.Result.AsCompleted())); } finally { input.FaceStream.Dispose(); } }
public void Post(IFaceStream stream) { ProcessingBlock.Post(stream); }