2013-05-22 45 views
0

C#初始化對象我有一個類的構造函數的東西,如:與並行任務或其他方式

AuthenticationService = new AuthenticationService(); 

然而這個「變量初始化」可能需要幾秒鐘,有時父類仍可能不需要它。 如何使用並行編程來初始化它並仍然讓「父」類繼續,只有當他需要使用它並且對象AuthenticationService尚未準備好時才能等待。

我該怎麼做?

我的解決方案(感謝喬恩斯基特)

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

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

看起來你可以使用Lazy ,它將在調用它們時計算值。 – maxlego

回答

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任務。

+0

檢查我的實施。謝謝 – Dryadwoods

+0

@Dryadwoods:爲什麼打擾與單獨的變量?每次只返回'authTask.Result'。儘管我會讓它成爲一種方法而不是一種財產,因爲它可能需要一段時間才能返回。 –

+0

第二個變量不見了:)再次感謝。 – Dryadwoods

相關問題