我对重复数据有疑问。 我有一个客户端,多次调用API来填充一些网格。 API实例是一种检查数据是否存在以及是否创建所有数据的服务。 问题是,当创建数据的方法很繁重并且需要很长时间时。因此,两种方法可以同时运行,并且两种方法都可以保存数据并创建重复数据 我可以将API调用排入队列,然后一次将其排除吗? 还是有另一种方法可以实现? 这里的API代码
[Produces("application/json")]
[Route("api/v1/Combinations")]
public class CombinationsController : Controller
{
private readonly ICommonService _CommonService;
private readonly ILogger _logger;
public CombinationsController(ICommonService CommonService,
ILogger<CombinationsController> logger)
{
_logger = logger;
_CommonService = CommonService;
}
[HttpPost("GenerateCombinationsByAttributes",Name ="GenerateCombinationsByAttributes")]
public async Task<IActionResult> GenerateCombinationsByAttributes([FromBody] List<Guid> attributeIds)
{
if (attributeIds == null || attributeIds.Count == 0 || attributeIds.Contains(Guid.Empty))
return BadRequest();
var ret = await _CommonService.GenerateCombinationByAttributesList(attributeIds);
return Ok();
}
}
答案 0 :(得分:0)
我想我已经用一个简单的信号量来解决了这个问题 我已经声明了
static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1, 1);
在微服务类内部 然后
public async Task<Result> GenerateCombinationByAttributesList(List<Guid> attributeIds)
{
var result = new Result();
await semaphoreSlim.WaitAsync();
try
{
DoHeavyStuffHere();
}
catch (Exception ex)
{
_logger.LogError(ex.Message);
result.SetError(ex.Message);
}
finally
{
semaphoreSlim.Release();
}
return result;
}