Task
을 Task<String>
으로 반환하는 함수가 있습니다. Task
내에서 await
을 여러 번 호출해야하므로 익명의 async
함수를 사용해야합니다. 내가 널 오류를 반환하려고하면비동기 익명 함수를 실행하는 작업 내에서 반환 유형은 무엇입니까?
익명 기능이
비동기 람다 표현식이 변환 값을 반환 할 수 대리자를 반환 무효로 변환 (비주얼 스튜디오 메시지) 발생하지만 내가
""
를 반환 할 수 있다는 것을 발견했다 '작업'대리자가 값을 반환 할 수 없습니다. '과제'를 돌려 주시겠습니까?
여기서 무슨 일이 벌어지고 같은 문제
public virtual Task<String> FooBar()
{
return Task<String>.Run(async() =>
{
await Task.Delay(1500);
return ""; // OK
//return null; // Error
});
}
을 보여주는 기능? 내가 널 값을 반환하려는 경우
그것은 return await Task.FromResult<String>(null);
에 더 적합 할 것인가?
왜 처음에는 'Task.Run'을 사용하고 있습니까? 당신은 CPU 바운드 작업이 없으며 비동기 작업이 있습니다. 단순히 여기에서 아무것도 수행하지 않아서 전화를 완전히 제거하십시오. 이 기본 클래스의 정적 메소드의로 – Servy
그것은 주목할 필요가'작업 .Run' 정확히 Task.Run''과 동일합니다. 컴파일러는 여전히'Run'에 제공된 델리게이트로부터 리턴 타입을 추론 할 필요가 있습니다 (이것은 계속 진행하기 위해'null'만으로는 할 수 없습니다). –
@CharlesMager 다른 "문제"를 이해하고 정리합니다. Visual Studio에서는 ''부분이 약간 희미 해 지므로 필요하지 않습니다. 나는 그것이 어떻게 든 타입을 유추하고 있다는 것을 알았지 만, 지금 그것이 정확히 어떻게되는지를 알 수 있습니다. 방법 @Servy –
KDecker