[英]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.