Невозможно объявить интерфейс "async Task <myObject> MyMethod (Object myObj);"
Я не могу объявить
interface IMyInterface
{
async Task<myObject> MyMethod(Object myObj);
}
Компилятор говорит мне:
- Модификатор async недействителен для этого элемента
- Модификатор async может использоваться только для методов с телом
Является ли это чем-то, что должно быть реализовано, или же природа async и ожидания запрещает это когда-либо возникать?
Ответы
Ответ 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> мгновенно