我正在构建一个 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);
}
当我查看 Fiddler 时,请求都是按顺序执行的;执行和处理所有这些需要几秒钟。但是,我不希望代码在移动到下一个请求之前等到 1 个请求完成,我想同时执行多个请求。
通常我会使用 Parallel.Invoke()
或 Parallel.ForEach()
或类似的东西来执行此操作,但显然 Parallel 库在 Windows 中不可用电话 8.
那么实现这一目标的最佳方法是什么? 任务.工厂.StartNew()
? 新线程()
?
最佳答案
无需在单独的线程上运行每个请求。您可以轻松地做到这一点:
var raw = await Task.WhenAll(uris.Select(uri => httpClient.GetStringAsync(uri)));
var processed = raw.Select(data => dataProcessor.Process(data)).ToArray();
此代码获取 uris
的集合并为每个开始 HTTP 下载 (Select(...)
)。然后它异步等待它们全部完成 (WhenAll
)。然后在第二行代码中处理所有数据。
但是,Windows Phone 运行时可能会限制您对同一服务器的最大请求数。
关于c# - 如何在 Windows Phone 上运行并行任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20288391/