我在使用 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 个问题,当我尝试运行此程序时,我在 Start() 上收到 InvalidOperationException,并显示错误消息“Start may not be call on a Promise-style task.”此错误消息不会谷歌或必应中似乎没有出现,所以我不确定这是什么意思。这是我最关心的问题,如何让它运行。我还尝试了 TaskFactory.StartNew() 但不明白如何以这种方式将参数传递给我的方法。
异步方法返回的任务始终hot即它们是在运行状态下创建的。尝试从代码中删除 task.Start() - 它应该可以修复它。
引用自Stephen Toub 的异步/等待常见问题解答 http://blogs.msdn.com/b/pfxteam/archive/2012/04/12/10293335.aspx:
我是否需要“启动”由标记为“异步”的方法创建的任务?
不会。从 TAP 方法返回的任务是“热”任务,这意味着这些任务代表已经在进行中的操作。您不仅不需要在此类任务上调用“.Start()”,而且如果尝试这样做也会失败。有关更多详细信息,请参阅 Task.Start 上的常见问题解答。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)