Enforce an async method to be called once

前端 未结 3 1279
广开言路
广开言路 2020-12-29 09:53

Say I have a class that needs to perform some async initialization using an InitializeAsync() method. I want to make sure that the initialization is performed only once. If

3条回答
  •  一整个雨季
    2020-12-29 10:01

    I have a blog post that covers a few different options for doing "asynchronous constructors".

    Normally, I prefer asynchronous factory methods, because I think they're simpler and a bit safer:

    public class MyService
    {
      private MyService() { }
    
      public static async Task CreateAsync()
      {
        var result = new MyService();
        result.Value = await ...;
        return result;
      }
    }
    

    AsyncLazy is a perfectly good way of defining a shared asynchronous resource (and may be a better conceptual match for a "service", depending on how it is used). The one advantage of the async factory method approach is that it's not possible to create an uninitialized version of MyService.

提交回复
热议问题