Задача, возвращающая интерфейс [закрыто]

Мне нужно реализовать следующее тело метода:

      public Task<IAsyncDisposable> SomeMethodAsync()

Так что его можно использовать так:

      await using (await SomeMethodAsync())

Однако я не знаю, как вернуться. Я пытался создать класс Release что происходит от IAsyncDisposable однако компилятор жалуется, что не может привести Task<Release> к Task<IAsyncDisposable>, хотя и происходит от него.

      public class Release : IAsyncDisposable
    {
        public ValueTask DisposeAsync()
        {
            throw new NotImplementedException();
        }
    }

1 ответ

Итак, вы не можете раскрыть соответствующие части реализации в SomeMethodAsync ... так что попробую угадать:

      public Task<IAsyncDisposable> SomeMethodAsync()
{
   // ... yadda yadda 
   // create an object "release" of type Release which inherits IAsyncDisposable
   // or maybe you get it returned from some API call ...
   return Task.FromResult(release);
}

Это верно? Или хотя бы похожее?

В этом случае решение заключается в простом приведении:

      public Task<IAsyncDisposable> SomeMethodAsync()
{
   // ... yadda yadda 
   // create an object of type Release which inherits IAsyncDisposable
   return Task.FromResult((IAsyncDisposable)release);
}

и ошибка должна исчезнуть.

См. Также: https://dotnetfiddle.net/WcMiIn

Подскажите пожалуйста, если мое предположение неверно - потом удалим.

Другие вопросы по тегам