c# - 使用 c# 从 Azure 存储帐户表检索记录,同时使用 xamarin 开发跨平台应用程序给出错误

标签 c# android azure xamarin azure-storage

使用 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;
         }

提前致谢。

最佳答案

要么一直异步,要么一直同步。尽量避免将两者混合。

Task Ilogin() 是异步方法,而 void Logmein() 则不是

应该将其设为异步然后等待

private async Task Logmein() {
    await Ilogin();
}

Task.Run 不需要使用即发即忘方法,因为它们的异常无法被捕获。另外,混合阻塞调用(例如 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

关于c# - 使用 c# 从 Azure 存储帐户表检索记录,同时使用 xamarin 开发跨平台应用程序给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51118411/

相关文章:

c# - 使用 Flurl 从 JSON 解析为对象

c# - 使用 C# 向电子邮件添加附件

java - 在 android studio 3.1.3 中集成任何库时无法解决依赖性错误

android - 找不到属性 'counterEnabled' 的资源标识符

azure - SignalR:Azure 虚拟机上的 WebSockets 错误 400

c# - Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式

c# - windiff 样式垂直线

java - onCreate 中设置的属性,导致 onResume 中出现 NullPointer

azure - 带转换的 Angular2 配置数据

node.js - Node Js 服务器端的 Azure 移动服务 facebook/provider Oauth