2012-12-08 2 views
0

나는 MSDN 문서, 에서 이것을 읽었는데, 아래에 붙여 넣은 코드에서 SendAsync 메서드를 호출 한 후에도 기다릴 필요가 있음을 암시하는 것처럼 보입니다. 이게 옳은 거니? 그렇다면 SendAsync보다는 Send라는 동기 메서드를 사용하는 것이 좋습니다. 내 목표는 루프에서 다음 전자 메일 메시지로 이동하여 이전 메서드가 전송 될 때까지 기다리지 않고 보내고 Send 메서드를 사용하는 것보다 emailMessages 컬렉션을 더 빨리 처리 할 수있게하는 것이 었습니다. 그러나 그것은 사실처럼 보이지 않습니다.SendEmailAsync benefits doubtful

SendAsync를 호출 한 후에 보내기 또는 SendAsync를 사용하여 다른 전자 메일 메시지를 보내기 전에 전자 메일 전송이 완료 될 때까지 기다려야합니다.

저는 C# 및 .Net 프레임 워크 4.5를 사용하고 있습니다. 내 코드에서는 SendAsync 메서드를 사용하여 아래 코드에서와 같이 루프 내에서 여러 개의 전자 메일을 보내려고합니다.

List<EmailMessage> emailMessages = DAL.GetEmailsToBeSent(); 
SmtpClient client = new SmtpClient(); 

foreach(EmailMessage emailMessage in emailMessages) 
{ 
    //create a message object from emailMessage object and then send it asynchronously 
    client.SendAsync(message); 
//client.Send(message); 
} 
+0

UI 기반 응용 프로그램 또는 서비스/비 UI 유형 응용 프로그램에서 호출 하시겠습니까? 그것이 의심 스럽다면 사용 된 상황에 달려있다. 당신은 정교 할 수 있습니까? – rene

+0

기본 폼이 숨겨진 Winforms 앱에서이 코드를 호출합니다. 그래서 내 Winforms 앱은 일처럼 행동합니다. – Sunil

+0

내 Winforms 응용 프로그램에서 유일한 양식을 숨기고 있기 때문에 UI가 없습니다. – Sunil

답변

2

비 비동기 대안을 통해 async 방법의 장점은 현재 스레드를 차단하지 않아도됩니다. 이는 특히 UI 스레드를 차단하고 싶지 않은 UI 환경에서 유용하며 스레드 풀 스레드를 차단할 필요도 없습니다.

결과에 대한 차단 대기 만 수행하려는 경우 비동기 대체 방법보다 이점이 없습니다.

관련 문제