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

Web 选择策略来处理异步API调用的响应,web,asynchronous,Web,Asynchronous,有一个web应用程序没有自己的数据库,但通过API与远程应用程序通信。执行对API的调用需要一些时间,我们是异步执行的。从用户的角度来看,应用程序的响应性必须很高 假设用户正在更改某些数据。为了存储数据,我们需要打电话。我们在打电话后立即开始显示新数据。但是,如果呼叫响应不成功,我们该怎么办?我们需要恢复旧值并向用户显示某种警告。但用户可能会离开数据已更改的页面,看到完全不同的页面。处理这种情况的一般模式是什么?如果您使用的是.Net 4.5,您可以使用async/await来实现这一点。如果您

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


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

如果您使用的是.Net 4.5,您可以使用
async/await
来实现这一点。如果您正在调用的web客户端提供了一个异步API,该API返回一个
任务
,那么您只需在
try/catch
块中等待调用即可。
wait
将导致该方法立即返回,以便用户在执行时继续观察旧数据。一旦we client调用完成,方法“resumes”将在
wait
之后,您可以更新数据

如果web客户端调用导致异常,该方法将在
catch
块中恢复,您可以向用户显示错误

public async Task CallAPI()
{
    try
    {
        var client = ...
        await client.CallAPI();
    }
    catch(Exception ex)
    {
        // show warning message
    }
}
如果您的web客户端不提供异步API,则可以使用任务并行库实现等效的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()); 
}
有关于
async/await
的更多信息。并且有一些最佳实践可以遵循