Избегайте асинхронности, когда это возможно
вне привычки/мышечной памяти, вы можете написать:
Код: Выделить всё
public async Task CallAsync()
{
var client = new Client();
return await client.GetAsync();
}
< /code>
Хотя код является семантически правильным, использование Async Keyword здесь не требуется и может иметь значительные накладные расходы на горячих путях. Попробуйте удалить его, когда это возможно: < /p>
public Task CallAsync()
{
var client = new Client();
return client.GetAsync();
}
Код: Выделить всё
public async Task Correct()
{
using (var client = new Client())
{
return await client.GetAsync();
}
}
public Task Incorrect()
{
using (var client = new Client())
{
return client.GetAsync(); // ❌ May dispose client before completion
}
}
< /code>
В неправильной версии, поскольку задача не ожидается внутри использования блока, клиент может быть утилизирована до завершения вызова getAsync. Ненужный асинхронный/ожидающий в репозиционном слое.
[b] Вот что я сделал: [/b]
в сервисном уровне (без изменений):
public async Task GetUsers()
{
var users = await _userRepository.GetAllAsync();
if(!users.Success)
return Result>.Fail("Cannot fetch users");
return Result>.Success(users);
}
до
Код: Выделить всё
public async Task GetAllAsync()
{
var userList = await _context.Users.ToListAsync();
return userList;
}
public Task GetAllAsync()
{
var userList = _context.Users.ToListAsync();
return userList;
}
< /code>
Я не знаю, хорошо ли это или плохо. Я только что прочитал эту статью и не могу найти ответ для себя (из -за моих ограниченных знаний). Я хотел бы услышать ответ, чтобы понять его правильно.
Подробнее здесь: https://stackoverflow.com/questions/796 ... ing-a-task
Мобильная версия