public async void OnFinished(SpassFingerprintStatus status)
        {
            //_completedSource = new TaskCompletionSource<int>();
            var resultStatus = GetResultStatus(status);
            
            if (resultStatus == FingerprintAuthenticationResultStatus.Failed && _retriesLeft > 0)
            {
                _failedListener?.OnFailedTry();

                if (_retriesLeft > 0)
                {
                    _retriesLeft--;

                    //await _completedSource.Task;
                
                    if (await StartIdentify())
                        return;
                }
            }
            else if (resultStatus == FingerprintAuthenticationResultStatus.Failed && _retriesLeft <= 0)
            {
                resultStatus = FingerprintAuthenticationResultStatus.TooManyAttempts;
            }

            _taskCompletionSource.TrySetResult(new FingerprintAuthenticationResult
            {
                Status = resultStatus
            });
        }
        private static FingerprintAuthenticationResultStatus GetResultStatus(SpassFingerprintStatus status)
        {
            FingerprintAuthenticationResultStatus resultStatus;

            switch (status)
            {
            case SpassFingerprintStatus.Success:
                resultStatus = FingerprintAuthenticationResultStatus.Succeeded;
                break;

            case SpassFingerprintStatus.TimeoutFailed:
            case SpassFingerprintStatus.SensorFailed:
                resultStatus = FingerprintAuthenticationResultStatus.Failed;
                break;

            case SpassFingerprintStatus.UserCancelled:
                resultStatus = FingerprintAuthenticationResultStatus.Canceled;
                break;

            case SpassFingerprintStatus.ButtonPressed:
                resultStatus = FingerprintAuthenticationResultStatus.Canceled;
                break;

            case SpassFingerprintStatus.QualityFailed:
                resultStatus = FingerprintAuthenticationResultStatus.Failed;
                break;

            case SpassFingerprintStatus.UserCancelledByTouchOutside:
                resultStatus = FingerprintAuthenticationResultStatus.Canceled;
                break;

            case SpassFingerprintStatus.Failed:
                resultStatus = FingerprintAuthenticationResultStatus.Failed;
                break;

            case SpassFingerprintStatus.OperationDenied:
                resultStatus = FingerprintAuthenticationResultStatus.UnknownError;
                break;

            case SpassFingerprintStatus.PasswordSuccess:
                resultStatus = FingerprintAuthenticationResultStatus.Succeeded;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(status), status, null);
            }
            return(resultStatus);
        }
 private static FingerprintAuthenticationResultStatus GetResultStatus(SpassFingerprintStatus status)
 {
     FingerprintAuthenticationResultStatus resultStatus;
     switch (status)
     {
         case SpassFingerprintStatus.Success:
             resultStatus = FingerprintAuthenticationResultStatus.Succeeded;
             break;
         case SpassFingerprintStatus.TimeoutFailed:
         case SpassFingerprintStatus.SensorFailed:
             resultStatus = FingerprintAuthenticationResultStatus.Failed;
             break;
         case SpassFingerprintStatus.UserCancelled:
             resultStatus = FingerprintAuthenticationResultStatus.Canceled;
             break;
         case SpassFingerprintStatus.ButtonPressed:
             resultStatus = FingerprintAuthenticationResultStatus.Canceled;
             break;
         case SpassFingerprintStatus.QualityFailed:
             resultStatus = FingerprintAuthenticationResultStatus.Failed;
             break;
         case SpassFingerprintStatus.UserCancelledByTouchOutside:
             resultStatus = FingerprintAuthenticationResultStatus.Canceled;
             break;
         case SpassFingerprintStatus.Failed:
             resultStatus = FingerprintAuthenticationResultStatus.Failed;
             break;
         case SpassFingerprintStatus.OperationDenied:
             resultStatus = FingerprintAuthenticationResultStatus.UnknownError;
             break;
         case SpassFingerprintStatus.PasswordSuccess:
             resultStatus = FingerprintAuthenticationResultStatus.Succeeded;
             break;
         default:
             throw new ArgumentOutOfRangeException(nameof(status), status, null);
     }
     return resultStatus;
 }