我被困在看起来很简单的东西,但我不明白我做错了什么。我有一个简单的类结构'StaticQuote',它描述了从我试图找到最低值的复杂计算中返回的值。由于Calculate调用非常昂贵,因此我创建了一组任务,以便并行执行计算,然后使用Task.WhenAll等待比较结果(存储在StaticQuote对象中)之前全部完成。问题是,试图返回StaticQuotes的阵列我收到以下错误时:异步CTP任务。当所有问题
Cannot implicitly convert type
'System.Threading.Tasks.Task<Services.QuoteGeneratorAsync.StaticQuote[]>'
to'Services.QuoteGeneratorAsync.StaticQuote[]'
我已经看到了串等,其中该分配工作完全类似的例子所以无法了解其右侧没有返回一个StaticQuote结果数组?我是多线程代码和异步CTP的新手。任何人都可以提供答案吗?非常感谢。
例题:
List<Task<StaticQuote>> Calculations = new List<Task<StaticQuote>>();
foreach()
{
Calculations.Add(TaskEx.RunEx(() => Calculate(...my params....)));
}
StaticQuote[] Quotes=TaskEx.WhenAll<StaticQuote>(Calculations); --//this line won't compile
非常感谢乔恩 - 不会等待导致线程继续前进吗?我有一个循环的顶层,它再次调用了整个事物,所以试图一次控制走在线程的数量。我看到这个例子http://stackoverflow.com/questions/4174806/what-is-taskex-whenall-in-the-async-ctp为什么他在这里做的任务不适合我?托尼小马怎么样? :) – dustybin
@dustybin:'await'将导致该方法返回给调用者,但是当所有任务完成后它会回到这个方法。链接的问题*中的任务*使用'await',所以我不确定你的意思... –
是的例子使用await,但我担心,如果线程继续它会产生下一批计算线程从我的外部循环。这不应该是一个问题,我只是试图看看是否可以控制线程数量,因为Calculate()需要3-5秒才能返回。不想让太多人同时跑步。我去年在Async上进行了DDD Modern .Net日的演讲,但这是我第一次使用它。也刚刚意识到WhenAll有一个“.Result”属性 - doh。将阅读博客......欢呼声。 – dustybin