C# 异步任务无限期等待

2023-12-29

我正在尝试使用“异步”和“等待”提供的功能来异步下载网页内容,但我遇到了任务永远等待完成的问题。您能否让我知道以下代码片段有什么问题?

protected void Page_Load(object sender, EventArgs e)
{
    var websites = new string[] {"http://www.cnn.com","http://www.foxnews.com"};
    var tasks = websites.Select(GenerateSomeContent).ToList();

    //I don't want to use 'await Tasks.WhenAll(tasks)' as I need to block the
    //page load until the all the webpage contents are downloaded
    Task.WhenAll(tasks).Wait();

    //This line is never hit on debugging
    var somevalue = "Complete";
}

static async Task<Results> GenerateSomeContent(string url)
{
    var client = new HttpClient();
    var response = await client.GetAsync(url); //Await for response
    var content = await response.Content.ReadAsStringAsync();
    var output = new Results {Content = content};
    return output;
}

//Sample class to hold results
public class Results
{
    public string Content;
}

首先,确保您在 .NET 4.5 上运行,而不是 .NET 4.0。 ASP.NET 诞生了async-.NET 4.5 中感知。

那么,正确的解决办法是await的结果Task.WhenAll:

var tasks = websites.Select(GenerateSomeContent);
await Task.WhenAll(tasks);

ASP.NET 管道(仅在 .NET 4.5 中)将检测到您的代码是awaiting 并将暂停该请求直到Page_Load运行至完成。

使用同步阻塞任务Wait在这种情况下会导致僵局正如我在博客上解释的那样 http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 异步任务无限期等待 的相关文章

随机推荐

  • 如何更改 Laravel 5.6 中的列数据类型?

    我正在尝试使用 laravel 5 6 更改列数据类型 我有一个表 其中两列的数据类型为text但我想把它改成longtext 我尝试过以下操作 被处决composer require doctrine dbal 被处决composer d
  • Vegan 中的 ANOSIM 不起作用

    我正在尝试执行anosim分析于Vegan 但它似乎不起作用 它在 anosim 函数之后没有给出错误 但是当我尝试查看摘要时 它说 sort int x na last na last 递减 递减 中的错误 x 必须是原子的 我的数据看起
  • 在 Android 中删除 jcenter() 后找不到 org.apache.cordova:framework:7.0.0

    我的项目使用 Ionic 5 刚刚升级到 Capacitor 3 升级后 我收到以下错误 Please remove usages of jcenter Maven repository from your build scripts an
  • 无法格式化节点“值”以作为 SQL 执行

    我偶然发现了一个非常奇怪的 LINQ to SQL 行为 错误 我无法理解 我们以下面的表为例 客户 gt 订单 gt 详细信息 每个表都是前一个表的子表 具有常规的主外键关系 一对多 如果我执行以下查询 var q from c in c
  • 在 CALayer 上显示 NSImage

    我一直在尝试在 CALayer 上显示 NSImage 然后我意识到我显然需要将其转换为 CGImage 然后显示它 我有这个代码似乎不起作用 CALayer layer CALayer layer NSImage finderIcon N
  • Qt:捕获图像而不保存 - QCameraImageCapture

    在我正在进行的项目中 我在使用 OpenCV 和 QCamera 之间左右为难 基本上 我希望用户输入他们想要捕获的帧数 然后相机将应用我用 CUDA 和 CPU 实现编写的高斯滤波器来拍摄该数量的图像 然后返回数据并将其放入图表中 以便我
  • IPython 5.0 和控制台中的按键绑定

    新版本的 IPython 不再依赖于readline但使用纯Python库prompt toolkit 解决苹果和Windows系统的维护问题 A new feature is the ability to edit a multi lin
  • PHP 模块已加载警告

    刚刚注意到 PHP 在 CLI 上执行时会抛出警告 php 模块已经加载 php v PHP Warning Module PDO already loaded in Unknown on line 0 PHP Warning Module
  • Java 9 嵌套(分层或父/子)模块

    是否可以在 Java 9 中创建基于继承 或嵌套 的模块 像这样的事情 module a module a1 module a2 在此示例中 两个a1 and a2模块是以下的子模块a 如果我导入任何一个子模块 我将获得父模块的功能 a 以
  • 如何找到 Perl 模块的安装位置?

    如何通过名称获取已安装 Perl 模块的路径 例如Time HiRes 我想要这个只是因为我必须在 SGE Grid Engine 系统的不同节点上运行我的 perl 脚本 有时 甚至以其他用户名运行 我可以使用 CPAN pm 为自己安装
  • python 2.7 中的 zip 和 groupby 好奇心

    有人可以解释为什么这些在 Python 2 7 4 中输出不同的东西吗 他们在 python 3 3 1 中输出相同的内容 我只是想知道这是否是 2 7 中的一个错误 在 3 中已修复 或者是否是由于语言的某些变化所致 gt gt gt f
  • 在 Cassandra 中按创建日期排序

    我在订购数据时遇到问题卡桑德拉 Database 这是我的表结构 CREATE TABLE posts id uuid created at timestamp comment enabled boolean content text en
  • 我应该将存储的 Markdown 转换为 HTML,还是应该只存储 HTML?

    Markdown http daringfireball net projects markdown 似乎比 HTML 更容易编写和编辑 我见过的所有 HTML 编辑器都会输出大量不必要的垃圾 Markdown 看起来更干净 这就是我想做的
  • Android Studio 2.2.3 - minSdk(API21) > deviceSdk(API17) [重复]

    这个问题在这里已经有答案了 I get this error when I try to run an android tablet as an emulator Does it mean my device is older than t
  • jQuery 检查元素是否具有以某个字符串开头的类

    我需要循环访问页面中的一些元素 然后 对于每个元素 如果它有一个以 C 开头的类 则执行某些操作 dialog li each function if this hasClass C do something 这可能听起来很愚蠢 但是我应该
  • R 中的困难聚合,对球队篮球统计数据进行分组

    预先感谢您对此的任何帮助或建议 这是我正在使用的数据框的简短示例 boxscore stats structure list game id c 157046L 157046L 157046L 157046L 157046L 157046L
  • WCF WebGet 和 ICollection<>

    我正在尝试从 REST WCF 服务返回通用 ICollection 以下应该可行吗 ServiceContract public class WebConfigurationManager WebGet OperationContract
  • 有什么相对简单的方法来确定一个句子是英语的概率?

    我有许多字符串 字符集合 它们代表不同语言的句子 例如 你好 我叫乔治 Das brot is the gut etc 我想为每个句子分配分数 从 0 1 表明它们是英语句子的可能性 是否有一个公认的算法 或Python库 可以做到这一点
  • Java中删除字符串中的重复行

    我的字符串是 EEE EEE AAA BBB CCC BBB DDD CCC 但我需要这个字符串没有相同的行 像这样 EEE AAA BBB CCC DDD 我该怎么做 这是一个简单的答案 StringBuilder builder new
  • C# 异步任务无限期等待

    我正在尝试使用 异步 和 等待 提供的功能来异步下载网页内容 但我遇到了任务永远等待完成的问题 您能否让我知道以下代码片段有什么问题 protected void Page Load object sender EventArgs e va