저는 현재 async
라이브러리 코드를 많이 작성하고 있으며, 연속 코드를 원래 (대개 UI) 스레드 컨텍스트로 마샬링하는 것을 피하기 위해 각 비동기 호출 후에 ConfigureAwait(false)
을 추가하는 관행을 알고 있습니다. 레이블이 지정되지 않은 부울 매개 변수가 마음에 들지 않아 대신 ConfigureAwait(continueOnCapturedContext: false)
으로 작성했습니다. 비동기 메서드 내에서 ConfigureAwait (false)를 호출하는 대신 읽을 수있는 대안이 있습니까?
public static class TaskExtensions
{
public static ConfiguredTaskAwaitable<TResult> WithoutCapturingContext<TResult>(this Task<TResult> task)
{
return task.ConfigureAwait(continueOnCapturedContext: false);
}
public static ConfiguredTaskAwaitable WithoutCapturingContext(this Task task)
{
return task.ConfigureAwait(continueOnCapturedContext: false);
}
}
을 그래서 지금은 await SomethingAsync().WithoutCapturingContext()
대신 await SomethingAsync().ConfigureAwait(continueOnCapturedContext: false)
같은 것을 할 수 있습니다.
await FooAsync().WithoutCapturingContext();
var bar = await BarAsync().WithoutCapturingContext();
await MoreFooAsync().WithoutCapturingContext();
var moreBar = await MoreBarAsync().WithoutCapturingContext();
// etc, etc
제 생각에는 그건 : 나는 동일한 코드 블록에 async
메소드를 호출 할 때이 비슷한 끝낼 그러나 심지어이, 창살 시작, 그것을 개선 고려 코드를 훨씬 쉽게 읽을 수있게 만들기 시작했습니다.
제 질문은 기본적으로 다음과 같습니다 (확장 메서드의 이름을 줄이는 것 외에는)이 방법을 줄이는 방법이 있습니까?
는 항상 모든 매개 변수를 레이블 마십시오 : 아래 가능한
IgnoreContext
의 구현 (매우 약간 테스트)입니다? – i3arnon'ConfigureAwait()'를 낮은 레벨로 옮길 수 있습니다. 예. 'BarAsync()'를 래퍼 (wrapper)로 만드십시오.이 래퍼는 기본적으로 BarAsync(), WithoutCapturingContext()를 기다리고 있습니다. –
@ I3arnon 다양하지만 부울 매개 변수를 거의 항상 레이블링합니다. 이 경우 잘 알려진 패턴이지만 매개 변수를 레이블하는 데 좋은 인수가 있습니다. –