Skip to content

[RuntimeAsync] Handle covariant returns scenarios in combination with task-returning methods. #124238

@VSadov

Description

@VSadov

Re: #124062 . The PR was a mitigation, but we need actual fixes.

There are two loosely related issues, which may require separate fixes:

  • Task<T> inherits from Task.
    As an example, when a covariant override returns Task<Guid> vs. base method returning Task we may need two async variants for the overriding method - a real one (returns Guid) and a one that matches/overrides the base (calls the real variant, drops the return and returns void).

  • both Task and Task<T> are not sealed, so a covariant override may return something derived that is not a task at all.
    At least in a case where the base was MethodImpl.Async we may need to emit an async variant (thunk) for the overriding method that matches the base, even though the overriding method is not technically task-returning.

Other solutions may exist.

Metadata

Metadata

Assignees

Type

No type

Projects

Status

No status

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions