在ASP.Net应用程序中使用Task.WhenAny()的性能影响

时间:2018-06-16 08:50:30

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

在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. 调用此方法的Web请求已完成
  2. 在Web应用程序中调用垃圾收集
  3. 有没有更好的方法来处理这种情况,并且与长时间运行相比,当未观察到的任务出现故障时是否存在差异?

1 个答案:

答案 0 :(得分:1)

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