为啥 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-app 的 aws-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 或上面的步骤?你在任何地方都用Wait
或GetAwaiter().GetResult()
调用它吗?
我异步使用了一个按钮的点击事件,我更新了问题以便为您的问题提供更多细节。
【参考方案1】:
解决方法是设置正在使用的AWS区域,如下:
Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient provider = new Amazon.CognitoIdentityProvider.AmazonCognitoIdentityProviderClient(new AnonymousAWSCredentials(), RegionEndpoint.YourRegionAWS);
【讨论】:
考虑将其标记为答案,以帮助面临同样问题的其他人。以上是关于为啥 AmazonCognitoIdentityProviderClient 在 C# Xamarin 中会死锁?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?