1 回答
TA贡献1820条经验 获得超2个赞
你的问题是,你创建一个新的TaskQueue和SerialQueue每次。这样每次用户点击/调用PostMessage都会创建一个新的队列,任务是队列中的第一个任务,直接执行。
您应该使用静态/单例队列,以便每次单击/调用都适用于同一个队列对象。
但是,当您跨多个服务器扩展 Web 应用程序时,这会带来问题。为此,您应该将诸如(例如)Azure 队列存储之类的东西与 Azure Functions 结合使用。
启动文件
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<TaskQueue>();
services.AddSingleton<SerialQueue>();
// the rest
}
一些控制器.cs
[HttpPost(Name = "add-message")]
public async Task<IActionResult> PostMessage(
[FromBody] MessengerViewModel messengerViewModel,
[FromServices] TaskQueue taskQueue,
[FromServices] SerialQueue serialQueue)
{
await taskQueue.Enqueue(
() => SendMessage(
messengerViewModel.PhoneNr,
messengerViewModel.MessageBody,
messengerViewModel.ContactId,
messengerViewModel.State));
//I'm not running tasks at same time, using one or other at time
await serialQueue.Enqueue(
() => SendMessage(
messengerViewModel.PhoneNr,
messengerViewModel.MessageBody,
messengerViewModel.ContactId,
messengerViewModel.State));
return Ok();
}
- 1 回答
- 0 关注
- 460 浏览
添加回答
举报