2014-11-03 53 views
1

我一直在發現微軟身份的源代碼,並且在那裏遇到了這個代碼。在異步方法中設置屬性值

public virtual Task SetSecurityStampAsync(TUser user, string stamp, CancellationToken cancellationToken = default(CancellationToken)) 
    { 
     cancellationToken.ThrowIfCancellationRequested(); 
     ThrowIfDisposed(); 
     if (user == null) 
     { 
      throw new ArgumentNullException("user"); 
     } 
     user.SecurityStamp = stamp; 
     return Task.FromResult(0); 
    } 

我不明白這樣做的目的是什麼。真的,爲什麼那樣做? 該方法的身體甚至沒有包裹在任務中。 那麼有人可以告訴我這裏發生了什麼,它真的有意義嗎? 我必須做同樣的事嗎? 非常感謝。

P.S. 這是一個link源代碼的存儲庫

+0

該鏈接沒有指向源代碼,只是存儲庫 – 2014-11-03 12:17:13

回答

1

這是一個虛擬的方法,它應該允許重寫實現提供該方法的異步版本。

當前實現只設置一個屬性,但重寫的實現可能需要做一些更復雜的事情,例如。寫一些東西到磁盤上,這應該是異步的。

+0

感謝您的回覆。 我明白,但創建一個異步操作將值設置爲對象的屬性是否有意義? 在Identity中有很多這樣的事情。它一直在干擾一個線程池,以進行如此快速的操作。 那麼它有用嗎?謝謝。 – 2014-11-03 12:20:45

+0

另一個實現可能需要調用外部服務來驗證/處理/轉換郵票,將其存儲在數據庫或雲存儲庫等中。您沒有提供到原始代碼的鏈接,因此很難猜測如何在沒有搜索的情況下使用它整個存儲庫 – 2014-11-03 12:21:41

+0

鏈接在我的問題。但在這裏再次 - https://github.com/aspnet/Identity 請。 – 2014-11-03 12:24:15

0

方法確實返回一個包裝值爲0的任務,創建於Task.FromResult(0)。您不提供指向特定方法的鏈接,但我懷疑這只是一個不需要異步執行任何操作的默認實現。

我懷疑其他的實現可以覆蓋這個設置安全時間戳,邏輯可能涉及到外部服務的調用,因此需要異步處理時執行復雜的邏輯。

+0

明白了。謝謝。 – 2014-11-03 12:29:58