在异步方法中,代码没有await
任何东西,是否有人将其标记为异步,等待任务,然后返回?
除了潜在的不必要之外,这样做的负面影响是什么?
对于此示例,请假设QueryAsync
返回Task
.
private static async TaskInsertRecord_AsyncKeyword(SqlConnection openConnection) { int autoIncrementedReferralId = await openConnection.QueryAsync (@" INSERT INTO... SELECT CAST(SCOPE_IDENTITY() AS int)" ); return autoIncrementedReferralId; } private static Task InsertRecord_NoAsyncKeyword(SqlConnection openConnection) { Task task = openConnection.QueryAsync (@" INSERT INTO... SELECT CAST(SCOPE_IDENTITY() AS int)" ); return task; } // Top level method using (SqlConnection connection = await DbConnectionFactory.GetOpenConsumerAppSqlConnectionAsync()) { int result1 = await InsertRecord_NoAsyncKeyword(connection); int result2 = await InsertRecord_AsyncKeyword(connection); }
Paulo Morgad.. 7
阅读Stephen Cleary撰写的这篇博客文章:
等待异步和等待
阅读Stephen Cleary撰写的这篇博客文章:
等待异步和等待
不,您不应该不添加async
方法await
-甚至会有编译器警告。
您也不应该不必要地await
在这种方法中添加内容,因为它将使编译器为该方法生成明显更复杂的代码,并带来一些相关的性能影响。
从时序的角度来看,两种模式之间没有可观察到的差异-任务仍将异步运行,并且您仍然能够立即或在调用方的稍后时间等待。
我可以想到一个区别-如果您直接返回任务,则调用方可能会使用ConfigureAwait(false)
它,并且它将在其他线程上完成。当您await
在内部的任务中使用该方法时,该方法将控制await
执行代码的位置。
请注意,await
最后使用单个方法的成本并不比不使用单个方法的成本显着差-因此,如果您希望async
在所有异步方法上使用一致的编码风格用法,则除了时间紧迫的部分以外,它可能还不错。