У меня есть асинхронный метод MyActionAsync
, который получает в качестве параметра async Func<int, Task>
в качестве обратного вызова.Ответы на вызовы делегатов не выполняются
Метод вызывает асинхронный вызов правильно, но он выполняет этот шаг перед тем, как все await
из asynCallback были выполнены.
Это создает некоторые большие проблемы для меня.
Как я/что могу использовать, чтобы убедиться, что подобное await asyncCallback(id)
перейдет только после полного выполнения asyncCallback.
public class MyService
{
public async Task<int> MyActionAsync(int id, Func<int, Task> asyncCallback)
{
// 1. do something
// 2. execute the callback function
// Steps over this step after the first await is finished, and not when all of them are finished
await asyncCallback(id);
// 3. return
return id;
}
}
async Task Test()
{
Func<int, Task> asyncCallback =
async (id) =>
{
var products = await _unitOfWork.Products.Where(p => p.UserId == id).ToListAsync();
var pictures = await _unitOfWork.Pictures.Where(p => p.UserId == id).ToListAsync();
};
MyService service = new MyService();
await service.MyActionAsync(1, asyncCallback);
}
Вы уверены, что исключений не будет? –
что заставляет вас думать, что 'asyncCallback' еще не закончен? –
Действительно, у меня была ошибка на одной из строк внутри asyncCallback, и именно по этой причине она не оценила ее полностью. Моя ошибка – Catalin