我有一个Web应用程序,该应用程序调用用于数据的外部API。
如果用户触发了此外部呼叫,并且该呼叫已经生效,我不希望第二个请求触发一个新呼叫,而是等待第一个呼叫的结果(该呼叫的结果将两个请求都相同)。
如何使用async / await在c#中实现此目标?
答案 0 :(得分:2)
后续调用返回现有任务
当然,只需保留Task<T>
对象然后将其返回即可。
类似的东西:
private async Task<T> ImplementationAsync();
private Task<T> _task;
public Task<T> InterfaceAsync()
{
if (_task == null)
_task = ImplementationAsync();
return _task;
}
这是一个非常简单的示例。实际代码应考虑:
InterfaceAsync
吗?如果是这样,则_task
需要受到保护。AsyncLazy<T>
代替Task<T>
。Task<T>
/ AsyncLazy<T>
。