假设我有一个方法
class Player(pg.sprite.Sprite):
def __init__(self):
pg.sprite.Sprite.__init__(self)
self.images = player_images
self.rects = [image.get_rect() for image in self.images]
保存数据库中的单个项目,让我们说我需要运行500,000个项目,并且出于商业原因我无法进行批量操作(例如,我无法创建public async Task SaveItemToDb(ItemEntity item) { ... }
)。
我想知道最好的方法是什么,以便我不会使用同时运行的查询重载数据库,但每个查询可以被认为是彼此独立的。这是SaveItemsToDb(IEnumerable<ItemEntity> items)
的情况吗?
答案 0 :(得分:-1)
您可以确保最多只有numTasks
在运行。最后的棘手问题是确保你等到所有任务完成。不幸的是,CountDownEvent没有异步版本,所以它阻止了,但也许这不是什么大问题。
以下代码无法正确处理任何任务中的错误。你可能想要改进它。
async Task ProcessTasks(IEnumerable<Task> tasks, int numTasks){
var count = new CountDownEvent(0);
SemaphoreSlim semaphore = new SemaphoreSlim(numTasks);
foreach(var task in tasks){
await semaphore.WaitAsync();
task.ContinueWith(_=>{
semaphore.Release();
count.Signal();
}
);
}
count.Wait(); // Wait till the count reaches zero
}