实现一次性异步初始化:一种优越的方法
一个常见的编程挑战涉及仅执行一次关键的异步方法。虽然 SemaphoreSlim
可以实现这一点,但 AsyncLazy
提供了更优雅和简洁的解决方案。
AsyncLazy 简介:简化的解决方案
AsyncLazy
本质上是为异步操作设计的修改版 Lazy<T>
。 它在第一次访问时延迟初始化一个值,非常适合管理一次性异步初始化。
实施细节
以下是如何使用 AsyncLazy
确保异步初始化仅运行一次:
<code class="language-csharp">private AsyncLazy<bool> asyncLazy = new AsyncLazy<bool>(async () => { await DoStuffOnlyOnceAsync(); return true; });</code>
这会创建一个 AsyncLazy
实例,将异步初始化逻辑封装在 DoStuffOnlyOnceAsync
中。 结果是一个仅在第一次访问时执行的惰性任务。
使用示例
要触发初始化并等待其完成,只需使用 GetAwaiter()
:
<code class="language-csharp">var isInitialized = await asyncLazy.GetAwaiter();</code>
这将启动 DoStuffOnlyOnceAsync
(如果尚未运行)并返回一个表示成功的布尔值。
总结
AsyncLazy
提供了一种干净高效的方法来确保关键异步方法的单次执行。通过将初始化封装在惰性任务中,它简化了代码并提供了一种用户友好的方式来访问结果。
以上是AsyncLazy 如何确保关键的异步方法只执行一次?的详细内容。更多信息请关注PHP中文网其他相关文章!