我有一个类构造函数,类似于:
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());
}
答案 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
任务。