Nach someone who may be in the know ...
Die Begründung ist, dass der Vorteil der Kovarianz durch den Nachteil Unordnung aufgewogen wird (dh jeder würde eine Entscheidung treffen müssen, ob Aufgabe oder ITask zu verwenden, in jeder einzelne Ort in ihrem Code).
Es klingt für mich, als gäbe es keine sehr zwingende Motivation. ITask<out T>
würde viele neue Überladungen erfordern, wahrscheinlich ziemlich viel unter der Haube (ich kann nicht bestätigen, wie die tatsächliche Basisklasse implementiert ist oder wie speziell es im Vergleich zu einer naiven Implementierung ist), aber viel mehr in Form dieser linq
-like Erweiterungsmethoden.
Jemand anderes machte einen guten Punkt - die Zeit wäre besser zu verbringen class
es kovariant und kontravariant. Ich weiß nicht, wie schwer das wäre, aber das klingt nach einer besseren Nutzung der Zeit für mich.
Auf der anderen Seite erwähnt jemand, dass es sehr cool wäre, eine echte yield return
ähnliche Funktion in einer async
Methode zur Verfügung zu haben. Ich meine, ohne Fingerfertigkeit.
Interfaces können nur kovariant oder kontravariant sein. Klasse ist immer invariant. Lesen Sie mehr unter: http://stackoverflow.com/questions/13107071/why-classes-that-implement-variant-interfaces-remain-invariant –
Klassen sind in C# invariant. – Lee
Von [dieser Antwort] (http://stackoverflow.com/questions/12204755/can-should-tasktresult-be-wrapped-in-ac-sharp-5-0-aaitable-which-is-covarian) scheint es, dass jemand hat [eine kovariante ITask Wrapper] (https://github.com/jam40jeff/ITask) dafür geschrieben. Man kann auch über [einen Vorschlag zur Umsetzung hier] abstimmen (https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/5754247-make-task-t-implement-covariant-interface-itask- O). –