Допустим, у меня есть 3 метода следующим образом:
public async Task<int> CalculateData(int index, int trustLevel, string type)
{
var x = await CalculateBaseScore(index, type);
return ComplexProcess(x, trustLevel);
}
public async Task<int> CalculateBaseScore(int index, string type)
{
var conn_string = "...";
var sql = "...";
var param = new { Index = index, Type = type };
using (var conn = new SqlConnection(conn_string))
{
var db_output = await conn.ExecuteScalarAsync<int>(sql, param: param);
return db_output;
}
}
public int CalculateBaseScore(int index, int trustLevel)
{
//Omitted
}
Как видите, 2 из них используют asyn c -wait.
Во введении Стивена Клири asyn c -wait , сказано, что
Если вы можете написать это без ожидания, то вы должны написать это без ожидания и удалите ключевое слово asyn c из метода. Не асинхронный c метод, возвращающий Task.FromResult, более эффективен, чем асинхронный c метод, возвращающий значение.
В этом случае вызов базы данных, созданный Dapper, будет квалифицироваться как метод Я могу написать без asyn c -await и просто вернуть Task<int>
объект? Получу ли я какие-либо преимущества в производительности или других аспектах, если я изменю это на это?
public async Task<int> CalculateData(int index, int trustLevel, string type)
{
var x = await CalculateBaseScore(index, type);
return ComplexProcess(x, trustLevel);
}
public Task<int> CalculateBaseScore(int index, string type)
{
var conn_string = "...";
var sql = "...";
var param = new { Index = index, Type = type };
using (var conn = new SqlConnection(conn_string))
{
var db_output_task = conn.ExecuteScalarAsync<int>(sql, param: param);
return db_output_task;
}
}
public int CalculateBaseScore(int index, int trustLevel)
{
//Omitted
}
См. Во втором примере, я опустил ключевые слова asyn c -await в CalculateBaseScore
и просто возвратил Task
объект.