con*_*att 8 c# asynchronous async-await
在异步方法中,代码没有await任何东西,是否有人将其标记为异步,等待任务,然后返回?
除了潜在的不必要之外,这样做的负面影响是什么?
对于此示例,请假设QueryAsync<int>返回Task<int>.
private static async Task<int> InsertRecord_AsyncKeyword(SqlConnection openConnection)
{
int autoIncrementedReferralId =
await openConnection.QueryAsync<int>(@"
INSERT INTO...
SELECT CAST(SCOPE_IDENTITY() AS int)"
);
return autoIncrementedReferralId;
}
private static Task<int> InsertRecord_NoAsyncKeyword(SqlConnection openConnection)
{
Task<int> task =
openConnection.QueryAsync<int>(@"
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);
}
Run Code Online (Sandbox Code Playgroud)
不,您不应该不添加async方法await-甚至会有编译器警告。
您也不应该不必要地await在这种方法中添加内容,因为它将使编译器为该方法生成明显更复杂的代码,并带来一些相关的性能影响。
从时序的角度来看,两种模式之间没有可观察到的差异-任务仍将异步运行,并且您仍然能够立即或在调用方的稍后时间等待。
我可以想到一个区别-如果您直接返回任务,则调用方可能会使用ConfigureAwait(false)它,并且它将在其他线程上完成。当您await在内部的任务中使用该方法时,该方法将控制await执行代码的位置。
请注意,await最后使用单个方法的成本并不比不使用单个方法的成本显着差-因此,如果您希望async在所有异步方法上使用一致的编码风格用法,则除了时间紧迫的部分以外,它可能还不错。
| 归档时间: |
|
| 查看次数: |
1991 次 |
| 最近记录: |