Windows 8 app with sql database .GetAwaiter()。GetResult();成功完成后会挂断电话

时间:2013-11-19 03:48:56

标签: c# sql windows-store-apps async-await

正如标题所述,代码正在这里挂起>>>

ds.running.Create(r).GetAwaiter().GetResult();

在数据库中,我可以看到sql命令已成功完成,但程序本身尚未从该点开始,仍在等待GetResult()命令。我是否实现了.GetResult错误或者我做错了什么?

以下结果中的步骤也是为了准确理解每个命令中发生的事情:

第一步:

public async Task<int> Create(T newEntity)
    {
        return await db.InsertAsync(newEntity);
    }

第二步:

public Task<int> InsertAsync (object item)
    {
        return Task.Factory.StartNew (() => {
            var conn = GetConnection ();
            using (conn.Lock ()) {
                return conn.Insert (item);
            }
        });
    }

第3步:回到1步......它只是在应用程序运行的所有剩余时间内停留在那里....

1 个答案:

答案 0 :(得分:4)

在正常情况下,您不应该自己致电GetAwaiter(),您应该只使用await

您遇到的是同步等待async方法导致的classical deadlock。在这方面,呼叫.GetAwaiter().GetResult()的行为与.Wait()相同。