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

C# 在c中启动许多异步任务的语法#,c#,task-parallel-library,async-await,C#,Task Parallel Library,Async Await,在c#中使用新的异步/等待工具时遇到问题。以下是我的设想: static async Task<bool> ManageSomeRemoteTask(int Id, bool flag) { var result = await serviceClient.AuthenticateIdAsync(Id); [... Setup Some Data ...] await serviceClient.LongAndSlowRemoteCallAsync(Data)

在c#中使用新的异步/等待工具时遇到问题。以下是我的设想:

static async Task<bool> 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<bool>>();
    while(IdsLeftToProcess > 0 )
    {
      Task<bool> 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 ...]
}
static async Task ManageSomeRemoteTask(int-Id,bool标志)
{
var结果=等待serviceClient.AuthenticateIdAsync(Id);
[…设置一些数据…]
等待serviceClient.LongAndSlowRemoteCallAsync(数据);
}
不支持批处理的JunkTosomeWebService的静态无效发送
{
var myTasks=Dictionary();
while(idsleeftoprocess>0)
{
Task t=ManageSomeRemoteTask(Id,true);
添加(idsleeftoprocess,t);
myTasks[idsleeftoProcess].Start();
idsleeftoprocess--;
}
Task.WaitAll(myTasks.Values.ToArray());//等待它们全部完成
[…报告统计数字…]
}

我有一个问题,当我试着运行它时,我在Start()上得到一个InvalidOperationException,错误消息是“在承诺式任务中可能无法调用Start”。这个错误消息在Google或Bing中似乎没有出现,所以我不确定它的意思。这是我最关心的问题,如何让它运行。我还尝试了TaskFactory.StartNew(),但不知道如何通过这种方式将参数传递给我的方法。

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

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

引自:

我是否需要“启动”由标记为“异步”的方法创建的任务

否。从TAP方法返回的任务是“热”的,这意味着这些任务表示已经在进行的操作。这样的任务不仅不需要调用“.Start()”,而且如果您尝试,这样做将失败。有关详细信息,请参阅Task.Start上的常见问题解答


尽管我认为这句话根本就不应该出现,但如果你不从字典中找出你已经提到过的东西,你会节省一点时间。。。同样地,
myTasks[idsleeftoprocess].Start()最好用
t.Start()
(如果一开始有必要的话)来表示。事实上,你不能启动它们。这不是问题的全部吗?你说你不需要启动它们,这意味着你可以,如果你想的话。但事实并非如此。因此,InvalidOperationException:)我在模拟“异步”方法的响应时遇到了这个问题。因为我返回的任务是冷的,但由实际异步方法创建的任务是热的。@Jonathon Reinhart-添加了一个引用,感谢您指出,很容易遗漏像这样的小细节信息。谢谢你的帮助。