为啥 AmazonCognitoIdentityProviderClient 在 C# Xamarin 中会死锁?

Posted

技术标签:

【中文标题】为啥 AmazonCognitoIdentityProviderClient 在 C# Xamarin 中会死锁?【英文标题】: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() 调用它吗? 我异步使用了一个按钮的点击事件,我更新了问题以便为您的问题提供更多细节。 【参考方案1】:

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

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

【讨论】:

考虑将其标记为答案,以帮助面临同样问题的其他人。

以上是关于为啥 AmazonCognitoIdentityProviderClient 在 C# Xamarin 中会死锁?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?