Должен ли я удалить Async/ждать в методах хранилища, если я просто возвращаю задачу?C#

Место общения программистов C#
Ответить
Anonymous
 Должен ли я удалить Async/ждать в методах хранилища, если я просто возвращаю задачу?

Сообщение Anonymous »

Я стажер, который работает над сервисом - репо -шаблоном. Я прочитал статью Кевина Госсе. В нем говорится,
Избегайте асинхронности, когда это возможно
вне привычки/мышечной памяти, вы можете написать:

Код: Выделить всё

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();
}
Тем не менее, имейте в виду, что вы не можете использовать эту оптимизацию, когда ваш код обернут в блоки (например, Try/Catch или использует):

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»