이 짧은 블로그 게시물에서는 .NET Task의 유용한 5가지 확장 메서드를 보여드리겠습니다. 확장 메서드로 빌드할 것이므로 사용하기 쉽습니다. 그 위에 사용 방법에 대한 작은 예를 보여 드리겠습니다. 그럼 시작해 봅시다!
1. 발생하고 잊어버리기
때로는 작업을 실행하고 잊어버리고 싶을 때가 있습니다. 즉, 작업을 시작하고 싶지만 완료될 때까지 기다리기 싫을 때가 있습니다. 이 기능은 작업을 시작하고 싶지만 결과에 신경 쓰지 않을 때(중요하지 않은 작업) 유용합니다. 예를 들어 이메일을 보내는 작업을 시작하려는 경우입니다. 이메일이 전송될 때까지 기다렸다가 코드를 계속하고 싶지는 않을 것입니다. 따라서 FireAndForget 확장 메서드를 사용하여 작업을 시작하고 잊어버릴 수 있습니다. 선택적으로 메서드에 오류 처리기를 전달할 수 있습니다. 이 오류 처리기는 작업에서 예외가 발생할 때 호출됩니다.
특정 횟수만큼 작업을 재시도하려면 Retry 확장 메서드를 사용할 수 있습니다. 이 방법은 작업이 성공하거나 최대 재시도 횟수에 도달할 때까지 작업을 재시도합니다. 재시도 사이에 지연 시간을 전달할 수 있습니다. 이 지연은 각 재시도 사이에 사용됩니다.
publicstaticasyncTask<TResult> Retry<TResult>(this Func<Task<TResult>> taskFactory, int maxRetries, TimeSpan delay)
{
for (int i = 0; i < maxRetries; i++)
{
try
{
returnawait taskFactory().ConfigureAwait(false);
}
catch
{
if (i == maxRetries - 1)
throw;
await Task.Delay(delay).ConfigureAwait(false);
}
}
returndefault(TResult); // Should not be reached
}
사용:
var result = await (() => GetResultAsync()).Retry(3, TimeSpan.FromSeconds(1));