【发布时间】:2014-05-02 10:43:56
【问题描述】:
我在使用 c# 中的新 async/await 工具时遇到问题。这是我的场景:
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 个问题,当我尝试运行它时,我在 Start() 上收到一个 InvalidOperationException 错误消息“Start may not be called on a promise-style task.” 这个Google 或 Bing 中似乎没有出现错误消息,所以我不确定它是什么意思。这是我的第一个问题,如何让它运行。我也尝试过 TaskFactory.StartNew() 但不明白如何以这种方式将参数传递给我的方法。
【问题讨论】:
-
尽管我认为该行根本不应该存在,但您可以通过不从字典中提取已经引用的内容来节省一些时间......因为这样的
myTasks[IdsLeftToProcess].Start();最好用t.Start()表示(如果首先有必要的话)
标签: c# task-parallel-library async-await