使用AsAsyncEnumerableand時await foreach,每個專案都是延遲加載的。每個專案我想呼叫一個方法DoSomething,回傳Task。方法呼叫應該并行發生。當所有任務完成后,下面的方法應該回傳Unit。
public async Task<Unit> Handle(SomeRequest request, CancellationToken cancellationToken)
{
var entities = _dbContext.MyModel
.Where(...)
.AsAsyncEnumerable();
await foreach (var item in entities)
{
_ = item.DoSomething();
}
return Unit.Value;
}
我不確定在使用時如何等待所有任務await foreach。這是正確的方法嗎?:
public async Task<Unit> Handle(SomeRequest request, CancellationToken cancellationToken)
{
var entities = _dbContext.MyModel
.Where(...)
.AsAsyncEnumerable();
List<Task> tasks = new();
await foreach (var item in entities)
{
tasks.Add(item.DoSomething());
}
await Task.WhenAll(tasks);
return Unit.Value;
}
uj5u.com熱心網友回復:
給定的示例應該可以作業,特別是如果您期望的專案很少。
由于您沒有(可見的)機制來限制并發任務的數量,因此如果您有很多專案,您可能會遇到問題。例如,您可能會耗盡執行緒池。如果每個專案完成的作業量非常小,它也可能從批量處理專案中受益。要處理此類情況,您可能會考慮使用DataFlow之類的東西,它應該允許您指定并行度。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/494045.html
