class ResultBase {}
class Result : ResultBase {}
Task<ResultBase> GetResult() {
return Task.FromResult(new Result());
}
The compiler tells me that it cannot implicitly convert Task<Result>
to Task<ResultBase>
. Can someone explain why this is? I would have expected co-variance to enable me to write the code in this way.
According to someone who may be in the know...
It sounds to me like there is not a very compelling motivation either way.
ITask<out T>
would require a lot of new overloads, probably quite a bit under the hood (I cannot attest to how the actual base class is implemented or how special it is compared to a naive implementation) but way more in the form of theselinq
-like extension methods.Somebody else made a good point - the time would be better spent making
class
es covariant and contravariant. I don't know how hard that would be, but that sounds like a better use of time to me.On the other hand, somebody mentioned that it would be very cool to have a real
yield return
like feature available in anasync
method. I mean, without sleight of hand.