正如标题所述,代码正在这里挂起>>>
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步......它只是在应用程序运行的所有剩余时间内停留在那里....
答案 0 :(得分:4)
在正常情况下,您不应该自己致电GetAwaiter()
,您应该只使用await
。
您遇到的是同步等待async
方法导致的classical deadlock。在这方面,呼叫.GetAwaiter().GetResult()
的行为与.Wait()
相同。