Подтвердить что ты не робот

Невозможно объявить интерфейс "async Task <myObject> MyMethod (Object myObj);"

Я не могу объявить

interface IMyInterface
{
   async Task<myObject> MyMethod(Object myObj);
}

Компилятор говорит мне:

  • Модификатор async недействителен для этого элемента
  • Модификатор async может использоваться только для методов с телом

Является ли это чем-то, что должно быть реализовано, или же природа async и ожидания запрещает это когда-либо возникать?

4b9b3361

Ответ 1

Является ли метод реализованным с использованием async/wait или нет, является осуществление подробности. Как должен вести себя метод - это контракт подробно, который должен быть указан обычным способом.

Обратите внимание, что если вы вернете метод Task или Task<T>, это больше очевидно, что он должен быть асинхронным и, вероятно, будет сложным для реализации без асинхронности.

Из fooobar.com/questions/158876/...

Ответ 2

Независимо от того, является ли ваша реализация асинхронной, не имеет никакого отношения к вашему интерфейсу. Другими словами, интерфейс не может указать, что данный метод должен быть реализован асинхронным способом.

Просто выньте async из своего интерфейса, и он скомпилируется; однако не существует возможности для обеспечения асинхронной реализации, просто указав интерфейс.

Ответ 3

Если у вас есть интерфейс с двумя реализациями, это будет выглядеть как для каждой реализации.

public interface IUserManager
{
    Task<bool> IsUserInRole(string roleName);
}

public class UserManager1
{
    public async Task<bool> IsUserInRole(string roleName)
    {
        return await _userManager.IsInRoleAsync(_profile.Id, roleName);
    }
}

public class UserManager2
{
    public Task<bool> IsUserInRole(string roleName)
    {
        return Task.FromResult(Roles.IsUserInRole(roleName));
    }
}

Если это метод void, вам нужно return Task.CompletedTask; от неасинхронного метода (Я думаю, что .NET 4.5 и более поздние версии)

Смотрите также: Return Task <bool> мгновенно