Task.Factory.StartNew
不应用于启动异步操作,因为它不会展开返回的
Task
,然后返回一个新的
任务
一旦异步操作启动(或者更准确地说,完成它的同步部分),这就完成了。你应该使用
Task.Run
相反。
此外,
SendMessages
不应是异步的。然而,
Index
应该是,允许您使用异步
WhenAll
而不是封锁
WaitAll
.
private List<Task> taskList = new List<Task>();
public async Task<ActionResult> Index()
{
for (i = 0; i < 5; i++)
{
SendMessages();
}
await Task.WhenAll(taskList);
// call demo method
}
private void SendMessages()
{
var task = Task.Run(() => ProcessMessagesAsync()); // here
taskList.Add(task);
}
private async Task ProcessMessagesAsync()
{
while (run for 10 minutes)
{
// data save
}
}