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

 枫殇忆华年 发布于 2023-02-13 19:04

我正在构建一个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);
}

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

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

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

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

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

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

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

    2023-02-13 19:07 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有