Pat*_*ski 2 .net c# asynchronous async-await
我读过,我应该只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);
}
}
Run Code Online (Sandbox Code Playgroud)
这不安全。当您使用时操作尚未完成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);
}
}
Run Code Online (Sandbox Code Playgroud)