gpt4 book ai didi

c# - .NET ConcurrentDictionary GetOrAdd 方法可以调用异步方法吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:06:39 25 4
gpt4 key购买 nike

<分区>

我正在考虑使用 ConcurrentDictionary保存一些来自慢速源(例如数据库)的缓存数据。

对数据库的调用是async .那么,如果字典中不存在该项目,是否可以让并发字典调用异步方法?

例如:

const int userId = 1;
var cachedUsers = new ConcurrentDictionary<int, Task<User>>();
var user = await cachedUsers.GetOrAdd(userId, val => GetSlowDbResultAsync(userId, cancellationToken));

所以上面的伪代码试图做的是:

  • 用户 #1 是否存在于 C-Dict 中?
  • 是的,好的,使用它。
  • 不,从 Db 中获取用户 #1 并将其保存在缓存中。

所以 - 通过将 Task<User>进入并发字典的“值”(对于键/值):

  • 可以吗?
  • 我上面写的代码是否可以接受,或者我只是滥用了 async/await/c# 的所有神圣内容

注意事项:

本题为inspired from my question on twitter .
这类似于 previous question I asked但没有得到太多关注。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com