나는이 C# 컴파일러 오류에 부딪 혔고 컴파일러가 람다 유형을 추론 할 수 없다는 오류 메시지가 잘못된 것 같습니다.비동기 램버스 형식 유추에서 잘못된 C# 컴파일러 오류 메시지
Func<object> lambda = async() => { return await Task.FromResult(1); };
를 여기에서 컴파일러 오류입니다 : 여기에 코드의 관련 부분이다 나는 아주 이해가 안
error CS4010: Cannot convert async lambda expression to delegate type '
System.Func<object>
'. An async lambda expression may returnvoid
,Task
orTask<T>
, none of which are convertible to 'System.Func<object>
'.
부분은 마지막 문장이다. 람다는 실제로 Task<int>
을 반환하지만 컴파일러는 왜 그것을 System.Func<object>
으로 변환해야한다고 생각합니까?
반면에 오류 메시지가 전달하려고하는 것이 있다면 System.Func<object>
에 System.Func<Task<int>>
을 할당 할 수 없다는 것입니다. 일반 대리인 공분산의 덕분으로 보이지 않습니다. 이는 대신 잘 작동 함을 의미합니다.
Func<object> lambda = new Func<Task<int>>(async() => { return await Task.FromResult(1); });
컴파일러는 변수를 선언 한 방식이고 비동기 델리게이트와 호환되지 않기 때문에'System.Func
* 비동기 메서드의 반환 유형은 void, 작업 또는 작업이어야합니다. * –