簡體   English   中英

異步委托回調未完全執行

[英]Async delegate callbacks not fully executing

我有一個異步方法MyActionAsync ,該方法接收異步Func<int, Task>作為回調作為參數。

該方法正確地調用了asyncCallback,但是在執行了來自aynCallback的所有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內部引發了異常

當遇到await語句並設置正在等待的異步操作時, async方法將返回。 然后, await完成后,其余方法將繼續。

我不相信您可以逐步執行類似的async方法,但是如果您輸入一些Console.WriteLine語句,您應該會看到期望的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM