为什么 AmazonCognitoIdentityProviderClient 在 C# Xamarin 中死锁?
Why does AmazonCognitoIdentityProviderClient deadlock in C# Xamarin?
我在 C# 和 WPF 中使用了名为 aws-cognito-dot-net-desktop-app 的 aws-samples 示例在 Windows PC 应用程序中:
aws-cognito-dot-net-desktop-app
它运行良好,可以在 Cognito 中正确注册用户。
现在,我将相同的代码用于 Android 应用程序和 C#。
要注册用户,请执行以下操作:
bool success = await helper.SignUpUser(etUserName.Text, etPasswordUser.Text, etEmailUser.Text, etPhoneUser.Text);
注册用户如下:
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();
....
}
但是这部分,在创建provider的时候,代码卡住了:
没有异常或其他类型的错误发生。
有没有办法找出 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 的例子。此 link 的形式:
在查看代码并了解如何创建提供者时,我将代码更改为如下:
Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient provider = new Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient(/*new Amazon.Runtime.AnonymousAWSCredentials()*/new AnonymousAWSCredentials(), RegionEndpoint.USEast1);
现在代码不会冻结并转到下一行:
我需要继续检查其余代码以确定其他可能的问题
解决方法是设置正在使用的AWS区域,如下:
Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient provider = new Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient(new AnonymousAWSCredentials(), RegionEndpoint.YourRegionAWS);
我在 C# 和 WPF 中使用了名为 aws-cognito-dot-net-desktop-app 的 aws-samples 示例在 Windows PC 应用程序中:
aws-cognito-dot-net-desktop-app
它运行良好,可以在 Cognito 中正确注册用户。
现在,我将相同的代码用于 Android 应用程序和 C#。
要注册用户,请执行以下操作:
bool success = await helper.SignUpUser(etUserName.Text, etPasswordUser.Text, etEmailUser.Text, etPhoneUser.Text);
注册用户如下:
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();
....
}
但是这部分,在创建provider的时候,代码卡住了:
没有异常或其他类型的错误发生。
有没有办法找出 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 的例子。此 link 的形式:
在查看代码并了解如何创建提供者时,我将代码更改为如下:
Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient provider = new Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient(/*new Amazon.Runtime.AnonymousAWSCredentials()*/new AnonymousAWSCredentials(), RegionEndpoint.USEast1);
现在代码不会冻结并转到下一行:
我需要继续检查其余代码以确定其他可能的问题
解决方法是设置正在使用的AWS区域,如下:
Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient provider = new Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient(new AnonymousAWSCredentials(), RegionEndpoint.YourRegionAWS);