选择策略来处理来自异步API调用的响应

时间:2014-05-13 16:01:13

标签: web asynchronous

有一个Web应用程序没有任何自己的数据库,但通过API与远程通信。执行API调用需要一些时间,我们异步执行。从用户的角度来看,应用程序的响应性必须很高。

假设用户正在更改某些数据。要存储我们需要拨打电话的数据。我们在拨打电话后立即开始显示新数据。但是如果电话的响应不成功,我们该怎么办?我们需要恢复旧值并向用户显示某种警告。但是用户可能会离开页面,其中数据被更改并且看到完全不同的页面。处理此类情况的一般模式是什么?

1 个答案:

答案 0 :(得分:0)

如果您使用的是.Net 4.5,则可以使用async/await执行此操作。如果您正在调用的Web客户端提供了返回Task的异步API,则只需await try/catch块内的await调用。 await将导致该方法立即返回,以便用户在执行时继续观察旧数据。一旦我们的客户呼叫完成,方法"恢复"在catch之后,您可以更新数据。

如果Web客户端调用导致异常,该方法将在public async Task CallAPI() { try { var client = ... await client.CallAPI(); } catch(Exception ex) { // show warning message } } 块中恢复,您可以向用户显示错误。

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()); 
}

如果您的Web客户端没有提供异步API,您可以使用任务并行库实现等效。

async/await

This article了解有关{{1}}的更多信息。 this one有一些最佳实践可供使用。