我读到过,当我完全确定操作已完成时,我应该只使用 Result
而不是 await
。我不太确定下面发生了什么,想问问有经验的程序员,这是否是 await
/Result
/async
的绝对安全用法。
public static bool Success()
{
return 0 < Execute("DELETE FROM Table WHERE Id = 12").Result;
}
public static async Task<int> Execute(string sql)
{
using (var con = Connection)
{
con.Open();
return await con.ExecuteAsync(sql);
}
}
最佳答案
这不安全。使用 Task.Result
当您调用异步方法时,它会同步运行,直到到达等待状态,然后将代表异步操作的任务返回给调用方。
任务未完成,使用 Task.Result
将阻塞调用线程。
您应该等待返回的任务,或者使用同步选项。
public static Task<bool> SuccessAsync()
{
return 0 < await ExecuteAsync("DELETE FROM Table WHERE Id = 12");
}
public static async Task<int> ExecuteAsync(string sql)
{
using (var con = Connection)
{
con.Open();
return await con.ExecuteAsync(sql);
}
}
关于c# - 使用 Result 时出现死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31213842/