Task
및 Task<T>
을 반환하는 메서드를 제공하는 타사 DLL을 사용하고 있습니다. 이 어셈블리 또는 인터페이스에 대한 제어권이 없기 때문에 저자의 생각에 따르면 메서드의 이름이 Async()이므로 비동기 적이어야합니다.비동기 코드가없는 경우 Task를 반환하는 타사 인터페이스를 어떻게 처리합니까?
그렇다면 실제로 비동기 코드가 실행되고 있지 않으면 인터페이스를 올바르게 구현하는 방법은 무엇입니까? 또한
public class FooBar : IFoo
{
public async Task DoWorkAsync()
{
// Do Some Work
await Task.Yield();
}
public async Task<int> GetValueAsync()
{
// Do Some Work
var result = ...;
return Task.FromResult(result);
}
}
:
public interface IFoo
{
Task DoWorkAsync();
Task<int> GetValueAsync();
}
내 시도는 다음이었다 저자가 Task
/Task<T>
을 반환 메소드 만 노출의 올바른
- 이 되었습니까?
- 접미사 메서드 이름에 * Async()가 올바른지 확인하십시오. 이름에 비동기을 추가하지 않고 비동기 메소드를 작성하면 코드 분석이 불평하지 않습니다.
나는'Async' 메소드를 호출 할 때 '예'라고 말하고 싶습니다. 명확하고 단순하게 만듭니다. 당신이 업 그레 이드하고'GetSomething'과'GetSomethingAsync' 메소드를 갖기 위해 하위 호환성을 유지하려고 할 때. – rbm
나는 일반적으로 귀하의 두 가지 접근 방식 중 하나를 수행합니다. 기다릴 것이 아무것도 없다면 기다릴 것이 없다. 불필요한 것 같지만 제 3 자 라이브러리는 그대로 있습니다. – David
@David : 두 가지 방법이 있습니다. 두 가지 방법이 있습니다. 하나는 기술적으로 반환하지 않기 때문에 'Task'대신 'Task' 만 사용하는 것입니다. –
michael