좋아, 이상하게 들리지만 코드는 매우 간단하고 상황을 잘 설명합니다.
public virtual async Task RemoveFromRoleAsync(AzureTableUser user, string role)
{
AssertNotDisposed();
var roles = await GetRolesForUser(user);
roles.Roles = RemoveRoles(roles.Roles, role);
await Run(TableOperation.Replace(roles));
}
(저는 초록에서 일종의 이야기를하고 있지만 위의 내용은 실제로 여기에서 요구하는 것을 실제로 수행하는 실제 생산 코드의 실제 방법이며 실제로는 귀하의 실제 검토에 관심이 있습니다 정확성을 위해 async / await 패턴을 사용하십시오.)
나는 async
/ await
더 많이 사용하기 때문에이 패턴이 점점 더 자주 발생합니다 . 패턴은 다음과 같은 일련의 이벤트로 구성됩니다.
- 내가 작업해야 할 정보를 얻는 최초의 전화를 기다립니다
- 해당 정보에 대해 동 기적으로 작업
- 업데이트 된 작업을 저장하는 최종 통화를 기다립니다
위의 코드 블록은 일반적으로 이러한 메소드를 처리하는 방법입니다. 나는 await
내가 비동기이기 때문에해야하는 첫 번째 호출. 다음으로 IO 또는 리소스 바운드가 아닌 비동기 작업이 필요한 작업을 수행합니다. 마지막으로, 나는 또한 async
호출 인 나의 일을 저장 하고,화물 컬트에서 벗어납니다 await
.
그러나 이것이이 패턴을 처리하는 가장 효율적이고 올바른 방법입니까? await
마지막 전화를 건너 뛸 수있는 것처럼 보이지만 실패하면 어떻게됩니까? 그리고 동기 작업을 원래 호출과 연결 Task
하는 것과 같은 방법을 사용해야 ContinueWith
합니까? 나는 이것을 올바르게 처리하고 있는지 확실하지 않은 시점에 있습니다.
예제에 코드가 주어지면 이 async / sync / async 메서드 호출 체인을 처리하는 더 좋은 방법이 있습니까?