如果我在ASP.Net应用程序中调用了以下代码,是否会对具有未等待任务的性能产生影响?未观察到的任务是否会在垃圾收集时导致问题,如果任务出现故障但是从未访问过异常会出现问题吗?
public async Task<Customer> GetCustomer(string customerId)
{
Customer customer;
// Call the two tasks
var customerTask = GetCustomerAsync(customerId);
var alcoholicBeveragesTask = GetAlcoholicBeveragesAsync();
customer = await customerTask;
if (customer.Age >= 21)
{
// Only await the task if we have to since it may be long running
var alcoholicBeverages = await alcoholicBeveragesTask;
customer.AddBeverages(alcoholicBeverages);
}
return customer;
}
答案 0 :(得分:0)
首先请注意,无论如何都会执行GetAlcoholicBeveragesAsync()
。无论您是否等待,该任务都将完成。等待没有执行任务,它等待它。可能,这是不可取的。性能影响正在执行此任务。等待通常不是Web应用程序中的性能问题,因为等待的频率很低。
没有固有的GC问题。任务完成后,所有内存都将被丢弃。
默认情况下,未观察到的任务异常不再使进程崩溃。我认为丢弃(而不是记录)错误是不好的做法,因为这可能会隐藏错误。理想情况下,您仍会记录所有错误。您可以在该任务中执行此操作,或附加延迟以记录错误或将其包装在另一个记录异常的辅助方法中。