익명의 방법 또는 람다 아니라 하나에 할당 할 수있는 유형 Action
의대리인이 방법은 다음 코드에
class Program
{
static async Task Work()
{
await Task.Delay(1000);
}
static async Task Main()
{
// Action a = Work;
Action b = async() => await Task.Delay(1000);
Action c = async delegate() { await Task.Delay(1000); };
}
}
대리자가 입력 Task
방법 Work
에 할당 될 수 없지만 이상하게 할당 될 수있다 익명 메서드 또는 Task
유형의 람다로 변환합니다. 나의 이해에서
는
async delegate() { await Task.Delay(1000); }
async() => await Task.Delay(1000)
Work
는
async() => await Task.Delay(1000)
async delegate() { await Task.Delay(1000); }
Action a = async() => await Task.Delay(1000)
Action b = async delegate() { await Task.Delay(1000); }
Func<Task> a = async() => await Task.Delay(1000)
Func<Task> b = async delegate() { await Task.Delay(1000); }
Action
에 호환되지 않는 동일한 서명을해야합니다. 이 불일치의 원인은 무엇입니까?
편집 :
다음 람다 익명 방법
모두 Action
또는 Func<Task>
할당의 왼쪽에 따라 나타낼 수있다. 더 정확하게,
암시 Func<Task>
로 변환
, 암시 적으로 Action
로 변환
@ JSteward의 의견은 약입니까? 모든
'작업'은 '작업'이 아닙니다. 람다 또는 델리게이트를 지정할 때'async void' 메쏘드를 생성하는 반면'Work'는'Task'를 반환합니다. 대신에 그 메소드를'Func'에 할당 할 수 있습니다. – JSteward
"비동기 무효 메서드를 만드는 람다 또는 델리게이트를 할당 할 때"<--- 오 진짜? 감사! –