使用 c# 从 Azure 存储帐户表中检索记录,同时使用 xamarin 开发跨平台应用程序给出错误
Posted
技术标签:
【中文标题】使用 c# 从 Azure 存储帐户表中检索记录,同时使用 xamarin 开发跨平台应用程序给出错误【英文标题】:Retrieving records from Azure Storage account table using c# while developing cross platform app using xamarin giving error 【发布时间】:2018-12-09 15:11:44 【问题描述】:使用 c# 从 Azure 存储帐户表中检索记录,同时使用 xamarin 开发跨平台应用程序时出现错误。
await tbl.ExecuteAsync(retrieveOperation);
I AM FOLLOWING THIS LINK!
当 ILogin() 单独执行时,即不通过 Logmein(),此代码给出异常(时间等待和异步错误使用 storageexception)。
当我使用当前形式的代码运行 Logmein() 时,什么也没有发生,即没有发生异常错误。
当我使用 task.Wait();发生与等待相关的异常/错误。我将尝试提供异常详细信息。
我的代码在这里
private void Logmein()
var task = Task.Run(async () => await Ilogin(); );// Nothing happens by this code
//task.Wait(); It gives error/Exception.
private static async Task Ilogin()
// Rest of the code is right (TESTED)
Microsoft.WindowsAzure.Storage.Table.CloudTable table = tableClient.GetTableReference("user");
Entry uname = new Entry();
Entry pword = new Entry();
Label linfo = new Label();
string userid = uname.Text.ToString();
string passcode = pword.Text.ToString();
Reg signuser = new Reg(userid);
TableOperation retrieveOperation = TableOperation.Retrieve<Reg>("regform", userid);
TableResult retrievedResult = await tbl.ExecuteAsync(retrieveOperation); //This AWAIT is making trouble
Reg loginuser = (Reg)retrievedResult.Result;
string u1 = loginuser.username.ToString();
string p1 = loginuser.password.ToString();
if (u1 == userid && p1 == passcode)
linfo.Text = "Login Successful";
//await Navigation.PushAsync(new MainPage());
else
linfo.Text = "Invalid Username or Password";
// here is my exception handling code
catch (Exception ex)
linfo.Text = "login Login Error" + ex.Message + ex.StackTrace + ex.HelpLink + ex.Source;
提前致谢。
【问题讨论】:
什么错误?在哪条线上?不幸的是,正如所写,没有具体的工作;他们需要有人加载/运行您的代码才能看到错误。请编辑具体。 发布错误详情,可能还有await tbl.ExecuteAsync<TableResult>(retrieveOperation);
//task.Wait();它给出错误/异常。请参阅在线#2
Panveet_Singh 是的。我认为这条线因为“等待”而制造麻烦
David Makogon,我用 try/catch 测试过很多次。运行此代码没有任何反应。
【参考方案1】:
要么一直异步,要么一直同步。尽量避免将两者混为一谈。
Task Ilogin()
是异步方法,而 void Logmein()
不是
它应该是异步的,然后等待
private async Task Logmein()
await Ilogin();
不需要Task.Run
with fire and forget 方法,因为它们的异常无法被捕获。此外,像 Task.Wait()
和 Task.Result
这样的阻塞调用可能会导致死锁。
如果需要调用Logmein()
,请尝试将其放入事件处理程序中,这样就可以等待async void
。
private async void SomeHandler(object sender, EventArgs args)
await Logmein();
如果是这种情况,您可以避免 Logmein()
并直接等待 Ilogin()
。
参考Async/Await - Best Practices in Asynchronous Programming
【讨论】:
谢谢 Nkosi,我要试试这个。是的,我想把它放在事件处理程序下。以上是关于使用 c# 从 Azure 存储帐户表中检索记录,同时使用 xamarin 开发跨平台应用程序给出错误的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用托管标识从 C# 控制台代码连接 Azure 文件共享(存储帐户)
如何使用 c# 从 azure blob 存储中检索 xml 文件
如何使用 JavaScript v12 SDK for Browsers 检索和显示(在浏览器中)存储在 Azure 存储帐户中的多个 pdf 的 URL