【问题标题】:What can cause my TPL tasks to stop running?什么会导致我的 TPL 任务停止运行?
【发布时间】:2016-01-15 16:40:19
【问题描述】:

我有以下代码:

while (true)
{
    Task.Run(() =>{
        var request = WebRequest.Create("url1");
        request.GetResponse();
    });

    Task.Run(() =>{
        var request = WebRequest.Create("url2");
        request.GetResponse();
    });

    Thread.Sleep(15000);
}

这个想法是每 15 秒调用几个端点。它可以正常工作大约 20 分钟,然后最终任务中的代码永远不会运行。没有错误。我是否创建了太多任务?也没有内存不足的问题。

【问题讨论】:

  • 如果它是您的实际代码,它缺少using(或Dispose) - 所以它应该很快就会失败您看到的方式......否则请确保提供重现的示例问题
  • 不,这几乎是代码。感谢您的评论,但究竟使用和处置什么?
  • 丢弃任何一次性的(请求、响应、流...)
  • 我明白了。您的意思是获取对请求对象的引用并关闭它。

标签: c# concurrency parallel-processing task-parallel-library


【解决方案1】:

@AlexeiLevenkov 给出的 cmets 提示从 request.GetResponse 获取对响应对象的引用,然后关闭响应解决了问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    相关资源
    最近更新 更多