Was sind die Unterschiede zwischen diesen beiden Methoden, die das gleiche zu tun scheint? Kann es auch mit Async gemacht werden/warten?C# Unterschiede zwischen Ergebnis und ContinueWith
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()) ;
}
Ein Unterschied wäre, dass derjenige mit '.Result' zu Deadlocks anfällig ist - http://stackoverflow.com/questions/17248680/await-works- But-Calling-Task-Ergebnis-hängt-Deadlocks –
@ LasseV.Karlsen Sie beide verwenden .Result – TheLethalCoder
Agh, ja, ok, lassen Sie mich umschreiben. Der, der '.Result' außerhalb von 'ContinueWith' verwendet (d. H.der zweite) ist anfällig für Deadlocking. Der einzige Ort, an dem es sicher ist, ".Result" zu lesen, stammt von einer Aufgabe, die garantiert abgeschlossen wurde. Das Lesen von '.Result' aus einer noch nicht abgeschlossenen Aufgabe kann zu einem Deadlock führen. –