c# - 如何异步初始化资源
问题描述
我有Task<ISomething>
应该在所有客户端线程之间共享。我也有Worker
每个请求创建一次的类 - services.AddScoped<Worker>()
。
ISomething
在我的异步代码中初始化而不多次构建它的正确方法是什么?
如果资源正在构建中(调用 web 服务),其他请求应该异步等待,直到它完成然后继续。锁定也不是AFAIK的选项。是AsyncLazy
好主意吗?
解决方案
您可以根据需要多次等待任务。
在这种特殊情况下,因为任务将在大部分时间完成,ValueTask<T>
将是一个更好的选择。
我没有提到创建的细节,ISomething
但你可以注入ValueTask<T>
大多数 DI 容器。
推荐阅读
- jmeter - JMeter - 设置 HTTP 源地址(又名 IP 欺骗)不起作用
- node.js - '(req: Request, res: IResponse, next: NextFunction) => void' 类型的参数不能使用 express.js 分配给'PathParams' 类型的参数
- regex - Bash 脚本删除包含多个单词的行,同时保留任何空格(alginment)
- python - AJAX+视图函数(API调用)+url映射如何巧妙结合?
- azure - 如何从管道 A 检查管道 B 的状态
- graphql - 阿波罗服务器订阅中的奇怪设计模式
- c# - 从 .NET 重置 AD 密码
- c# - 当我的视图模型从 xml 文件初始化时,为什么我的组合框之一为空?
- azure-devops - 忽略 AzureBlob 文件复制任务中的文件/文件夹
- python - ImageMagick可以用python程序打包吗?怎么做?