在c#中启动许多异步任务的语法

我在c#中使用新的async / await工具时遇到了麻烦。 这是我的情景:

static async Task ManageSomeRemoteTask(int Id, bool flag) { var result = await serviceClient.AuthenticateIdAsync(Id); [... Setup Some Data ...] await serviceClient.LongAndSlowRemoteCallAsync(Data); } static void SendATonOfJunkToSomeWebServiceThatDoesntSupportBatches { var myTasks = Dictionary<int, Task>(); while(IdsLeftToProcess > 0 ) { Task t = ManageSomeRemoteTask(Id, true); myTasks.Add(IdsLeftToProcess ,t); myTasks[IdsLeftToProcess].Start(); IdsLeftToProcess --; } Task.WaitAll(myTasks.Values.ToArray()); //Wait until they are all done [... Report statistics ...] } 

我有一个问题,当我尝试运行它时,我在Start()上得到一个InvalidOperationException,错误消息“ 可能没有在promise样式任务上调用Start。 ”此错误消息似乎没有出现在Google或Bing所以我不确定这意味着什么。 这是我的头号问题,如何让它运行。 我也试过TaskFactory.StartNew()但是不明白如何将参数传递给我的方法。

异步方法返回的任务总是很热,即它们是在运行状态下创建的。 尝试从代码中删除task.Start() – 它应该修复它。

Stephen Toub的异步/等待常见问题引用:

我是否需要“开始”由标记为“async”的方法创建的任务?

从TAP方法返回的任务是“热门”,这意味着任务代表已在进行中的操作。 你不仅不需要在这些任务上调用“.Start()”,但是如果你尝试的话,这样做会失败。 有关更多详细信息,请参阅Task.Start上的常见问题。

您不需要启动异步方法调用返回的任务。 它们默认启动。