2014-05-12 100 views
0
/// <summary> 
/// Delegate for executing an asynchronous request. 
/// </summary> 
public delegate void ExecuteRequestDelegate<T>(LazyResult<T> response); 

public void FetchAsync([Optional] ExecuteRequestDelegate<TResponse> methodToCall) 
     { 
      GetAsyncResponse(
       (IAsyncRequestResult state) => 
        { 
         var result = new LazyResult<TResponse>(() => 
           { 
            // Retrieve and convert the response. 
            IResponse response = state.GetResponse(); 
            return FetchObject(response); 
           }); 

         // Only invoke the method if it was set. 
         if (methodToCall != null) 
         { 
          methodToCall(result); 
         } 
         else 
         { 
          result.GetResult(); 
         } 
        }); 
     } 

我想打電話給現在FetchAsync,但我不知道我怎麼C#FetchAsync和委託調用在方法

service.Userinfo.Get().FetchAsync(new ExecuteRequestDelegate<Userinfo>() {...}); 

,然後取回該ExecuteRequestDelegate不包含一個構造函數參數0。

我該怎麼辦?我想獲得Userinfo數據?

回答

2

FetchAsync的參數是一種接受LazyResult的方法,因爲它只是參數,並且返回void。這與「回調」方法的一般模式一致,這是編寫異步方法的一種方式。爲了使其異步,這個方法在被調用後會立即返回,當它在邏輯上代表實際上代表的操作時,它會調用你的回調方法,將異步操作的結果作爲參數傳遞給回調函數。

雖然可以編寫出一個名爲方法來處理這種情況下,它通常適合使用這裏的λ:如果你不是一個行左右的代碼有更多的

service.Userinfo.Get().FetchAsync(
    lazyResult => Console.WriteLine(lazyResult.Result)); 

,那麼這是值得考慮的時間使用命名方法:

public void ProcessResult(LazyResult<Userinfo> result) 
{ 
    //Do stuff 
} 

service.Userinfo.Get().FetchAsync(ProcessResult); 
+0

精湛。感謝yolu的解釋 – senzacionale