Quali sono le differenze tra questi due metodi che sembrano fare la stessa cosa? Può essere fatto anche con async/attendi?C# Differenze tra Risultato e Continua con
public Task<int> TaskMaxAsync1 (Task<int>[] my_ints)
{
return Task.WhenAll(my_ints)
.ContinueWith (x => x.Result.Where (i => i%2 != 0).Max()) ;
}
public Task<int> TaskMaxAsync2 (Task<int>[] my_ints)
{
var numbers = Task.WhenAll(my_ints).Result ;
return Task.FromResult(numbers.Where(i => i%2 != 0).Max()) ;
}
Una differenza sarebbe che quella che utilizza '.Result' è incline a deadlocking - http://stackoverflow.com/questions/17248680/await-works- ma-calling-task-result-hang-deadlocks –
@ LasseV.Karlsen Entrambi usano .Result – TheLethalCoder
Agh, sì, ok, fammi riformulare. Quello che usa '.Result' al di fuori di' ContinueWith' (es.il secondo) è soggetto a deadlocking. L'unico posto in cui è sicuro leggere ".Result" deriva da un'attività che è stata completata. La lettura di '.Result' da un'attività che non è stata ancora completata potrebbe bloccarsi. –