如何在Windows Phone上运行并行任务?

Leo*_*ens 5 c# parallel-processing multithreading asynchronous windows-phone-8

我正在构建一个WP8应用程序,我需要执行大约30个Web请求.这些请求不依赖于彼此,因此可以并行化.

我的代码看起来像这样(简化/伪代码):

foreach (Uri uri in uris)
{
    var rawData = await Task.Run(() => httpClient.GetStringAsync(uri).ConfigureAwait(false));

    var processedData = dataProcessor.Process(rawData);
    processedDataCollection.Add(processedData);
}
Run Code Online (Sandbox Code Playgroud)

当我看到提琴手时,请求全部都是连续的; 它需要几秒钟来执行和处理所有这些.但是,我不希望代码等到1个请求完成后才转移到下一个请求,我想同时执行多个请求.

通常我会使用Parallel.Invoke()Parallel.ForEach()类似的东西来做到这一点,但显然并行库在Windows Phone 8中不可用.

那么实现这一目标的最佳方法是什么?Task.Factory.StartNew()new Thread()

Ste*_*ary 10

没有必要在单独的线程上运行每个请求.您可以轻松地执行此操作:

var raw = await Task.WhenAll(uris.Select(uri => httpClient.GetStringAsync(uri)));
var processed = raw.Select(data => dataProcessor.Process(data)).ToArray();
Run Code Online (Sandbox Code Playgroud)

此代码收集uris并开始每个(Select(...))的HTTP下载.然后它异步地等待它们全部完成(WhenAll).然后在第二行代码中处理所有数据.

但是,Windows Phone运行时可能会限制您对同一服务器的最大请求数.