异步委托回调未完全执行

Async delegate callbacks not fully executing

我有一个异步方法 MyActionAsync,它接收一个异步 Func<int, Task> 作为参数作为回调。

该方法正确调用了 asyncCallback,但它在执行完 asynCallback 中的所有 await 之前跳过了该步骤。

这给我带来了一些大问题。

我如何/使用什么来确保只有当 asyncCallback 完全执行时 await asyncCallback(id) 才会跳过。

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 方法 returns 当遇到 await 语句并设置正在等待的异步操作时。 await 完成后,该方法的其余部分将继续。

我不相信您可以像这样逐步完成 async 方法,但如果您输入一些 Console.WriteLine 语句,您应该会看到您期望的结果。