在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应用程序产生影响
有没有更好的方法来处理这种情况,并且与长时间运行相比,当未观察到的任务出现故障时是否存在差异?
答案 0 :(得分:1)
您应该取消剩余的任务,因为它们将运行完成但会被忽略(例外情况也是如此)。
考虑在第一个返回后使用CancellationToken
取消剩余任务。