【问题标题】:Performance impact of using Task.WhenAny() in an ASP.Net application在 ASP.Net 应用程序中使用 Task.WhenAny() 的性能影响
【发布时间】:2018-06-16 08:50:30
【问题描述】:

在 ASP.Net 应用程序中使用 Task.WhenAny() 是否被视为不好的做法?如果我有一个方法可以获取 stockQuote 并调用多个服务以获取某个价格,但我返回了我得到的第一个结果,如果在应用程序中经常这样做会产生什么影响?

public async Task<decimal> GetStockQuote(string stockSymbol)
{
    var task1 = PriceFromServiceOne(stockSymbol);    // Returns first
    var task2 = PriceFromServiceTwo(stockSymbol);    // Contains exception
    var task3 = PriceFromServiceThree(stockSymbol);  // Take 5 mins to return

    // What happens to the other two tasks?
    var priceTask = await Task.WhenAny(task1, task2, task3); 
    decimal price = await priceTask;
    return price;
}

两个未等待的任务是否会对 Web 应用程序产生影响

  1. 调用此方法的网络请求完成
  2. 在 Web 应用程序中调用垃圾收集

是否有更好的方法来处理这种情况?与长时间运行相比,未观察到的任务出现故障时是否存在差异?

【问题讨论】:

    标签: c# asp.net garbage-collection async-await


    【解决方案1】:

    您应该取消剩余的任务,因为它们将运行到完成但将被忽略(例外情况相同)。 考虑在第一个任务返回后使用CancellationToken 取消剩余任务。

    【讨论】:

      猜你喜欢
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 2011-11-24
      • 2019-06-19
      相关资源
      最近更新 更多