신고 할 수 없습니다.
interface IMyInterface
{
async Task<myObject> MyMethod(Object myObj);
}
컴파일러는 다음과 같이 알려줍니다.
이것이 구현되어야하는 것입니까, 아니면 async & 언제 까지나 이런 일이 벌어지기를 기다리고 있습니까?
메소드가 async / await를 사용하여 구현되는지 여부는 구현 세부 사항. 메소드가 작동하는 방식은 계약입니다. 세부 사항은 정상적인 방법으로 지정되어야합니다.
이 메소드가
Task
또는Task<T>
, 그 이상이다. 그것은 비동기적임을 분명히하고, 아마 힘들 것입니다. 비동기가 아닌 구현.
에서https://stackoverflow.com/a/6274601/43846
구현이 비동기식이든 아니든 인터페이스와의 관련성은 없습니다. 즉, 인터페이스는 주어진 메소드가 비동기 방식으로 구현되어야한다고 지정할 수 없습니다.
그냥 가져async
귀하의 인터페이스 밖으로 그것은 컴파일됩니다; 그러나 인터페이스를 지정하는 것만으로 비동기 구현을 시행 할 방법이 없습니다.
두 개의 구현 (하나는 진정으로 비동기식이고 다른 하나는 동기식)을 사용하는 인터페이스가있는 경우 이것은 각 구현에 대해 다음과 같이 나타납니다.Task<bool>
.
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));
}
}
그것이 당신이 필요로하는 무효 방법 인 경우return Task.CompletedTask;
비동기 메서드에서
(나는 .NET 4.5 이상을 생각한다)