首页 > 解决方案 > 如何异步初始化资源

问题描述

我有Task<ISomething>应该在所有客户端线程之间共享。我也有Worker每个请求创建一次的类 - services.AddScoped<Worker>()

ISomething在我的异步代码中初始化而不多次构建它的正确方法是什么?

如果资源正在构建中(调用 web 服务),其他请求应该异步等待,直到它完成然后继续。锁定也不是AFAIK的选项。是AsyncLazy好主意吗?

标签: c#asp.netasynchronousasp.net-coreasync-await

解决方案


您可以根据需要多次等待任务。

在这种特殊情况下,因为任务将在大部分时间完成,ValueTask<T>将是一个更好的选择。

我没有提到创建的细节,ISomething但你可以注入ValueTask<T>大多数 DI 容器。


推荐阅读