2014-05-13 53 views
0

有一個Web應用程序沒有任何自己的數據庫,但通過API與遠程進行通信。執行對API的調用需要一些時間,我們會異步執行。從用戶的角度來看,應用程序的響應速度必須很高。選擇策略來處理來自異步API調用的響應

我們假設用戶正在改變一些數據。要存儲我們需要撥打電話的數據。我們在撥打電話後開始顯示新數據。但是如果通話的迴應不成功,我們該怎麼辦?我們需要恢復舊值並向用戶顯示某種警告。但用戶可能離開頁面,數據發生變化,並看到完全不同的頁面。處理這種情況的一般模式是什麼?

回答

0

如果您使用.Net 4.5,您可以使用async/await來完成此操作。如果您正在調用的Web客戶端提供的異步API返回Task,那麼您可以在try/catch塊中簡單地調用awaitawait將導致該方法立即返回,以便用戶在執行時將繼續觀察舊數據。一旦我們的客戶電話完成await後的「恢復」方法,您就可以更新您的數據。

如果Web客戶端調用導致異常,該方法將在catch塊中繼續,並且可以向用戶顯示錯誤。

public async Task CallAPI() 
{ 
    try 
    { 
     var client = ... 
     await client.CallAPI(); 
    } 
    catch(Exception ex) 
    { 
     // show warning message 
    } 
} 

如果您的網絡客戶端不提供異步API可以實現與任務並行庫的等價物。

public void CallAPI1() 
{ 
    Task.Factory.StartNew(() => 
    { 
     var client = ... 
     client.CallAPI(); 
    }).ContinueWith(t => 
    { 
     if(t.Exception != null) 
     { 
      // display error 
     } 
     else 
     { 
      // update web page with 
     } 
    }, 
    null, 
    CancellationToken.None, TaskScheduler.FromCurrentSynchronizationContext()); 
} 

This articleasync/await更多信息。並且this one有一些最佳實踐要遵循。