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

标签 c# multithreading asynchronous windows-phone-8 parallel-processing

我正在构建一个 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/

相关文章:

c# - 在本地测试 UDP C#

c# - 主窗口关闭时如何重新创建 Windows 窗体应用程序

c# - 有没有比 <%= %> 更好、更简单的内联提取文本的方法?

java - Java 中的线程 - N 个数字的总和

python - 如何在 tornado python 中创建异步 RequestHandler

c# - 从 DataGridView 获取数据表

c++ - 缓存行对齐(需要在文章中说明)

c# - 在另一个线程中打开第二个 WPF 窗口?

perl - 如何异步运行多个 perl open 命令并按顺序显示输出

node.js - 如何将信息发送回前端,运行由 webhook 触发的函数?