异步委托回调没有完全执行
本文关键字:执行 回调 异步 | 更新日期: 2023-09-27 17:53:01
我有一个异步方法MyActionAsync
,它作为参数接收异步Func<int, Task>
作为回调。
该方法正确调用asyncCallback,但是在asynCallback的所有await
被执行之前,它会跳过这一步。
这给我带来了一些大问题。
我如何/什么可以使用,以确保像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完成
你怎么知道它不会等到它结束?
也许它看起来没有等到结束,因为当你按下F11时,调试器不会进入Func,只有当你在
中放置一个断点时,它才会进入。你应该检查的另一件事是如果从Func async
方法在遇到await
语句后返回,并设置正在等待的异步操作。该方法的其余部分在await
完成后继续。
async
方法,但是如果您放入一些Console.WriteLine
语句,您应该可以看到您所期望的