【问题标题】:Why does AmazonCognitoIdentityProviderClient deadlock in C# Xamarin?为什么 AmazonCognitoIdentityProviderClient 在 C# Xamarin 中会死锁?
【发布时间】:2021-12-30 10:04:32
【问题描述】:

我在 C# 中使用了名为 ws-cognito-dot-net-desktop-appaws-samples 示例,并在 Windows PC 应用程序中使用了 WPF: p>

aws-cognito-dot-net-desktop-app

它运行良好,并且在 Cognito 中正确注册了用户。

现在,我将相同的代码用于带有 C# 的 Android 应用程序。

要注册用户,请执行以下操作:

bool success = await helper.SignUpUser(etUserName.Text, etPasswordUser.Text, etEmailUser.Text, etPhoneUser.Text);

SignUpUser如下:

internal async Task <bool> SignUpUser (string username, string password, string email, string phonenumber)
{

   Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient provider =
                     new Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient(new 
   Amazon.Runtime.AnonymousAWSCredentials());

   SignUpRequest signUpRequest = new SignUpRequest();

   ....
}

但是在这部分,当涉及到创建提供者时,代码会冻结:

不会发生异常或其他类型的错误。

有没有办法用 Visual Studio 找出发生了什么?

欢迎任何意见或建议。

更新

我调用SignUpUser的方式是这样的:

private async void clickCreateUser(object o, EventArgs e)
{
   ...
   try
   {

      CognitoHelper helper = new CognitoHelper();
      bool success = await helper.SignUpUser(etUserName.Text, etPasswordUser.Text, etEmailUser.Text, etPhoneUser.Text);
      ...

   }
   catch (Exception ex)
   {
    Android.Widget.Toast.MakeText(Application.Context, "Error: " + ex.Message, Android.Widget.ToastLength.Long).Show();
   }
}

更新2

我有一个 Xamarin 的示例。此链接的形式:

xamarinforms-awscognito

在查看代码并查看提供程序是如何创建的时,我将代码更改为如下:

Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient provider = new Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient(/*new Amazon.Runtime.AnonymousAWSCredentials()*/new AnonymousAWSCredentials(), RegionEndpoint.USEast1);

现在代码不会冻结并转到下一行:

我需要继续检查其余代码以确定其他可能的问题

【问题讨论】:

  • 如何调用 SignUpUser 或上面的步骤?你在任何地方都用WaitGetAwaiter().GetResult() 调用它吗?
  • 我异步使用了一个按钮的点击事件,我更新了问题以便为您的问题提供更多细节。

标签: c# android amazon-web-services xamarin amazon-cognito


【解决方案1】:

解决方法是设置正在使用的AWS区域,如下:

Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient provider = new Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient(new AnonymousAWSCredentials(), RegionEndpoint.YourRegionAWS);

【讨论】:

  • 考虑将其标记为答案,以帮助面临同样问题的其他人。
猜你喜欢
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 2015-03-09
  • 2019-12-27
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
相关资源
最近更新 更多