语法在C#中推出许多异步任务(Syntax for launching many async tas

2019-07-30 04:10发布

我使用的是新的异步有麻烦/等待在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 ...]
}

我在这1个问题,当我尝试运行此,我就开始()的错误信息得到一个InvalidOperationException“ 似乎此错误消息不上来的谷歌或冰,所以我不知道这意味着什么。 这是我的头号关注,如何得到这个运行。 我也试过TaskFactory.StartNew(),但不知道如何将参数传递给我的方法方式。

Answer 1:

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

从A报价斯蒂芬Toub的异步/等待常见问题解答 :

我需要通过标记为“异步”方法创建的“开始”任务?

从TAP方法返回的任务号是“热”,这意味着任务表示已经在正在进行的操作。 你不仅不需要调用“开始()”这样的任务,但如果你试图这样做会失败。 有关详细信息,请参见常见问题解答Task.Start。



Answer 2:

你并不需要开始通过异步方法调用返回的任务。 他们在默认情况下启动。



文章来源: Syntax for launching many async tasks in c#