지금 시작하지 않고 비동기 작업을 만들고 싶습니다. 내 함수에 반환 값을 추가 예외를 처리하는 그러나입력 된 비동기 작업 만들기
private Task CreateTask() {
return new Task(
async() => await DoSomething().ConfigureAwait(false));
}
: 유형이 지정되지 않은 작업으로 아무 문제가 없다. 하지만 올바른 구문으로 어떻게 쓸 수 있습니까?
private Task<bool> CreateTask() {
return new Task<bool>(
async() => await DoSomething().ConfigureAwait(false));
}
비동기식 람다 식은 func로 변환 할 수 없다는 메시지가 나타납니다. 그럼 내 질문 : 올바르게 쓰여졌습니까?
두 가지 방법이 잘못. 'DoSomething()'은 이미 실행중인 Task를 반환하기 때문에 그대로 리턴 할 수 있습니다.'return (Task) DoSomething();'. 'await' *는 이미 실행중인 작업이 완료 될 때까지 기다리고 *, 비동기 적으로 시작하지는 않습니다. 'new'로 콜드 태스크를 생성 할 이유는 없습니다. 두 번째 경우에는 가치가 무엇입니까? –
[XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)의 경우와 같습니다. X에 문제가 있습니다. Y가 해결책이라고 생각하고 작동하지 않을 때 Y에 대해 물어보십시오. 해결할 실제 문제는 무엇입니까? –
동기 처리 메소드에서와 같이 예외 처리는'await'호출을 예외 처리기로 둘러 쌉니다. 'await'은 원 래 예외가 던져지게합니다. try {.... await CallMyServer();} catch (WebException exc)와 마찬가지로 try {.... await CallMyServerAsync();} catch (WebException exc) {...}) {{}}'CallMyServer'가 블로킹 메소드 인 경우 –