我必须实现MVC .Net Web (比如“主”api),它包括两个部分。
1)获取记录的数据库调用。2)和超过1000 s的另一个web调用(响应时间为100 ms的avg。将使用上述db调用返回的记录。
此外,主api将在每3秒连续调用一次。我尝试使用异步/等待方法实现,但没有发现太大进展,当尝试使用Apache工具测试它时,它抛出指定的超时已过期错误。
有办法做到这一点吗?请建议一下。
代码片段
[HttpGet]
public async Task<string> doTaskasync()
{
TripDetails obj = new TripDetails();
GPSCoordinates objGPS = new GPSCoordinates();
try
{
/* uriArray Contains more than 1000 APIs which needs to be exectued. */
string[] uriArray = await dolongrunningtaskasync();
IEnumerable<Task<GPSCoordinates>> allTasks = uriArray .Select(u => GetLocationsAsync(u));
IEnumerable<GPSCoordinates> allResults = await Task.WhenAll(allTasks);
}
catch (Exception ex)
{
return ex.Message ;
}
return "success";
}
发布于 2016-10-30 15:27:31
您的代码在编程上没有什么问题--只是这实际上是DOS对第二个(location) API的攻击。您肯定应该添加缓存,以避免至少一部分1000个api调用,特别是如果您经常调用主api (正如您所写的)。
我要做的是让内部api调用成为一个集中操作,而不是在您的web方法中单独进行这些调用。例如,您可以使用一个中央列表来定位已经启动(但尚未完成)的api调用(任务),并使用另一个列表来表示已经完成的结果。这两个列表都可以是一个并发字典,由用于位置api调用的惟一urls组成。
https://stackoverflow.com/questions/40177684
复制相似问题