【发布时间】:2017-05-28 07:51:15
【问题描述】:
在代码不是awaiting 任何东西的异步方法中,是否有人将其标记为异步,等待任务,然后返回?
除了潜在的不必要之外,这样做的负面影响是什么?
对于这个例子,请假设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);
}
【问题讨论】:
-
使用
async的方法从调用者的角度来看并不相同。两者都是返回Task的方法。async关键字只是使您可以在方法内部使用await,而不是调用者。 -
@NiyokoYuliawan 我很好奇提前等待是否会对性能产生任何影响。
-
也就是说 - 假设您信任代码的用户正确使用该方法 - 不,我看不到任何好处。
-
@Rob 它将在两个版本中并行运行(假设 QueryAsync 确实是异步的)。
await对启动 Task 没有影响(因为代码的同步部分在两种情况下运行相同)。
标签: c# asynchronous async-await