루프를 통과하는 프로세스가 있습니다. 루프가 반복 될 때마다 외부 웹 서비스를 호출 한 다음 객체를 EntityFramework 저장소에 추가합니다. 외부 서비스 호출은 정적 메서드로 래핑됩니다. 일반적으로 루프에는 하나 또는 두 개의 반복 만 있지만 현재 UI에서는 최대 4 개까지 반복 할 수 있습니다. (각 반복은 보험 견적을 나타냄).비동기 프로세스를 호출하는 루프를 리 팩터 처리합니다.
비동기 프로세스로 리팩터링하는 것이 이점으로 보입니다. 각 반복이 별도의 스레드에서 발생하도록 모든 스레드를 완료 할 때까지 대기하도록 커늘을 설정하는 방법은 무엇입니까?
public class ProcessRequest
{
private IUnitOfWork = unitOfWork;
public ProcessRequest(IUnitOfWork uow)
{
unitOfWork = uow;
}
public void Execute(MyRequestParams p)
{
foreach (Quote q in p.Quotes)
{
q.Premium = QuoteService.GetQuote(q);
unitOfWork.GetRepository<Quote>().Add(q);
}
unitOfWork.Commit();
}
}
public static class QuoteService
{
public static decimal GetQuote(Quote quote)
{
//I've simplified proprietary code to single line that calls an external service
return ExternalWebService.GetQuote(quote.Deductible);
}
}
이 WPF, WinForms, Webforms, MVC, Web API입니까? (답변과 매우 밀접한 관련이 있습니다.) –
이것은 n-tier 솔루션의 비즈니스 계층입니다. 비즈니스 계층은 MVC 프런트 엔드에 의해 호출됩니다. 비즈니스 계층을 UI가 호출하는 Restful API로 변환하는 것에 대한 논의가있었습니다. UI는 현재 트래픽이 적습니다 (소수의 사용자가있는 인트라넷). 그러나 먼 미래가 아니라면 확장 될 수 있습니다. –