C#使用并行任务或其他方式初始化对象

时间:2013-05-22 12:13:48

标签: c#-4.0

我有一个类构造函数,类似于:

AuthenticationService = new AuthenticationService();

然而,这种“变量初始化”可能需要几秒钟,有时父类可能仍然不需要它。 我如何使用并行编程来初始化它仍然让“父”类继续并且只在他需要使用它时才等待,并且对象AuthenticationService仍然没有准备好。

我该怎么做?

我的解决方案(感谢Jon Skeet)

    private Task<AuthenticationService> authTask;
    public AuthenticationService AuthenticationService
    {
        get
        {
            return authTask.Result;
        }
    }

    public MyConstructor(){
          authTask = Task.Factory.StartNew(() => new AuthenticationService());
    }

1 个答案:

答案 0 :(得分:1)

您可以使用Task

Task<AuthenticationService> authTask = 
    Task.Factory.StartNew(() => new AuthenticationService);

// Do other things here...

// Now if we *really* need it, block until we've got it.
AuthenticationService authService = authTask.Result;

请注意,Result属性将阻止当前线程,直到结果可用。如果您使用的是C#5,则可能需要考虑使用异步方法,在这种情况下,您可以await任务。