powershell - 使用 powershell 调用多个 Web 服务时重复值
问题描述
我创建了一个具有一个端点的 .Net Core ASP.NET Web 服务,该端点没有任何参数,并且在第一次调用时将返回 1。每次调用它时,它都会按顺序返回下一个数字。必须没有重复。
在浏览器的多个选项卡中运行它时,它不会返回重复的数字。但是当我同时在多个命令提示符下使用这个 powershell 命令时,我得到了重复。
powershell -Command "(new-object net.webclient).DownloadString('http://localhost:47536/api/sequence/number')"
这是我的实现:
public class SequenceNumbers
{
public ConcurrentDictionary<int, Numbers> _numbaList = new ConcurrentDictionary<int,
Numbers>();
public static SequenceNumbers sqnum = null;
public static SequenceNumbers getInstance()
{
if (sqnum == null)
{
sqnum = new SequenceNumbers();
return sqnum;
}
else
{
return sqnum;
}
}
}
public class SequenceResource : ISequenceResource
{
public static readonly object LockObject = new object();
public async Task<List<Numbers>> GetAllSequenceNumbers()
{
SequenceNumbers seq = SequenceNumbers.getInstance();
Numbers numctr = new Numbers();
int lastSeqNumber = 1;
lock (LockObject)
{
lastSeqNumber = seq._numbaList.ContainsKey(lastSeqNumber) ?
seq._numbaList.Last().Value.sequencenumber : lastSeqNumber;
if (seq._numbaList.TryGetValue(lastSeqNumber, out Numbers seqNum))
{
lastSeqNumber++;
numctr.sequencenumber = lastSeqNumber;
seq._numbaList.TryAdd(numctr.sequencenumber, numctr);
}
else
{
numctr.sequencenumber = lastSeqNumber;
seq._numbaList.TryAdd(numctr.sequencenumber, numctr);
}
}
await Task.Run(() =>
{
Thread.Sleep(2000);
});
return seq._numbaList.Select(x => x.Value).ToList();
}
}
[Route("api/[controller]")]
public class SequenceController : ControllerBase
{
private readonly ISequenceResource _seqResource;
public SequenceController(ISequenceResource seqResource)
{
_seqResource = seqResource;
}
[HttpGet("number")]
public async Task<IActionResult> GetAllSequenceNumbers()
{
var seqNum = await _seqResource.GetAllSequenceNumbers();
return Ok(seqNum);
}
}
我在 ConfigureServices 中注册它
services.AddScoped<ISequenceResource, SequenceResource>();
如何避免重复号码甚至多次通话?我也使用了锁定过程,但不知道我是否正确实施。
解决方案
推荐阅读
- reactive-programming - 如何在空 Mono 之后链接反应操作而不阻塞?
- css - 包裹的flexbox网格内的全高项目?
- python - 谷歌云函数中的 Python-docx
- postgresql - Postgresql 数据库的后加载脚本
- arrays - 字符串数组值不打印
- mysql - Iterative SQL query for datebased analyses
- html - 基于带有appendTo的数据属性使用jquery移动元素
- python - How to plot model accuracy and loss for cross-validation with SVM classifier?
- python - 将 Python 请求转换为 Microsoft Power BI M 代码
- sql - 在两个不同的列中使用联合连接两个查询结果