2015-04-18 58 views
4

我有以下溫控功能:如何覆蓋返回任務的功能

public override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout) 
{ 
    return base.PasswordSignInAsync(userName, password, isPersistent, shouldLockout); 
} 

我要修改它是這樣的:

public override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout) 
{ 
    var result = base.PasswordSignInAsync(userName, password, isPersistent, shouldLockout); 

    //If status was successful do some thing here 
    if(result = success) 
    { 
     //update last logged in time. 
    } 

    //Lastly return the result 
    return result; 
} 

現在我要修改什麼功能確實。

我想執行基本任務,然後使用它的結果在我的覆蓋函數中執行某些操作?

我該怎麼做?

回答

6

您可以通過將async關鍵字的方法,並等待基本操作這樣做:

public async override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout) 
{ 
    var result = await base.PasswordSignInAsync(userName, password, isPersistent, shouldLockout); 

    // Check result 
    return result; 
} 

由於提供的基礎調用返回Task<T>是awaitable,你可以等待它的使用async-await異步完成。

請注意,這意味着您將不得不「一路異步」,並確保在整個調用堆棧中正確等待調用。

更多async-await可以發現here

+0

然後做我只是在最後返回的結果? – Zapnologica

+1

是的。事實上,你在方法調用中使用了'await',這使得編譯器將操作轉換爲一個生成「Task」的狀態機。當你返回結果時,結果實際上被包裝成一個Task