public async Task RecognizeSpeechAsync(CNMAudioItem cnmAudioItem) { var stopRecognition = new TaskCompletionSource <int>(); var factory = _speechFactory ?? SpeechFactory.FromSubscription("77623f52633c426890a6d2bb11116c8b", "westus"); using (var recognizer = factory.CreateSpeechRecognizerWithFileInput(cnmAudioItem.Filename, "es-ES")) { recognizer.FinalResultReceived += (s, e) => { if (e.Result.RecognitionStatus == RecognitionStatus.Recognized) { cnmAudioItem.AppendTextLine(e.Result.Text); } }; recognizer.OnSessionEvent += (s, e) => { if (e.EventType == SessionEventType.SessionStoppedEvent) { cnmAudioItem.IsBusy = false; stopRecognition.TrySetResult(0); } }; recognizer.RecognitionErrorRaised += (s, e) => { Console.WriteLine(e.FailureReason); }; await recognizer.StartContinuousRecognitionAsync().ConfigureAwait(false); await stopRecognition.Task.ConfigureAwait(false); await recognizer.StopContinuousRecognitionAsync().ConfigureAwait(false); } }