2015-10-08 2 views
-1

Сеть. Пожалуйста, помогите мне. Смотрите мой код .. Если моя первая работа закончена, то выход из btn_ok код позади и обновление экрана ASP.NET, но в то же время работы 2 сусло рабочего (Bulk Email обрабатывает)Как выполнить асинхронную работу в asp.net

protected void btn_ok(object sender, EventArgs e) 
{ 

try 

    { 

    //**Job 1:** 

    CommonCls com = new CommonCls(); 
    com.SaveRecord(**Parameter Values**); 

    //Note :after save this, it must exit from this function and update Message to web Application Screen 

    //**Job 2** 
    EmailDAL em = new EmailDAL(); 
    ..... 
    ..... 

    try { 
        em.SendEmail(PTEmail, "Appointment Rescheduled ", "Dear " + PTName + "<br> &nbsp;&nbsp;&nbsp;&nbsp; Appointment with " + PName + " referred by " + GPName + " has been rescheduled " + Stime + ". <br> with Regards <br> <b>" + GPName + "</b>" + axolbl); 
       } 
       catch (Exception ex) { logger.Error(ex.ToString()); } 
       try 
       { 
        em.SendEmail(PEmail, "Appointment Rescheduled ", "Dear " + PName + "<br> &nbsp;&nbsp;&nbsp;&nbsp; Appointment for " + PTName + "(" + PTCode + ") referred by " + GPName + " has been rescheduled " + Stime + ". <br> with Regards <br> <b>" + GPName + "</b>" + axolbl); 
       } 
       catch (Exception ex) { logger.Error(ex.ToString()); } 
       try 
       { 
        em.SendEmail(GPEmail, "Appointment Rescheduled ", "Dear " + GPName + "<br> &nbsp;&nbsp;&nbsp;&nbsp; Appointment for " + PTName + "(" + PTCode + ") with " + PName + " has been rescheduled " + Stime + ". <br> with Regards <br> " + axolbl); 
       } 
       catch (Exception ex) { logger.Error(ex.ToString()); } 
    } 
catch (Exception ex) 
{ } 
} 

catch (Exception ex) 
{ } 
} 

Email Доступ к данным уровня


public class EmailDAL 
{ 

    internal string SMTP = ConfigurationManager.AppSettings["smtpServer"]; 
    internal string MailAddress = ConfigurationManager.AppSettings["smtpUser"]; 
    internal string Pwd = ConfigurationManager.AppSettings["smtpPass"]; 
    internal int Port = Convert.ToInt16(ConfigurationManager.AppSettings["smtpPort"]); 
    internal bool ssl = Convert.ToBoolean(ConfigurationManager.AppSettings["EnableSsl"]); 

    public string SendEmail(string toMail, string mailSubject, string Message) 
    { 

     SmtpClient SmtpServer = new SmtpClient(SMTP); 
     var mail = new MailMessage(); 
     mail.From = new MailAddress(MailAddress); 
     mail.To.Add(toMail); 
     mail.Subject = mailSubject; 
     mail.IsBodyHtml = true; 
     mail.Body = "<p style='line-height: 30px;'>" + Message + "</p>"; 
     SmtpServer.Port = Port; 
     SmtpServer.UseDefaultCredentials = false; 
     SmtpServer.Credentials = new System.Net.NetworkCredential(MailAddress, Pwd); 
     SmtpServer.EnableSsl = ssl; 
     try 
     { 
      SmtpServer.Send(mail); 
      return "Send Sucessfully"; 
     } 
     catch (Exception ex) 
     { 
      return ex.Message.ToString(); 
     } 
    } 
} 
+0

Нет проблем. Пожалуйста, отметьте как ответ, если это было полезно для вас. – hvaughan3

ответ

0

** Под редакцией Ответ Осмотрев свои методы, похоже, что вам нужно будет сделать, что EmailD AL.SendEmail() для вашего async. Чтобы сделать это, вы могли бы сделать что-то вроде следующего:

public async Task<string> SendEmailAsync(string toMail, string mailSubject, string Message) { 

    SmtpClient SmtpServer = new SmtpClient(SMTP); 
    var mail = new MailMessage(); 
    mail.From = new MailAddress(MailAddress); 
    mail.To.Add(toMail); 
    mail.Subject = mailSubject; 
    mail.IsBodyHtml = true; 
    mail.Body = "<p style='line-height: 30px;'>" + Message + "</p>"; 
    SmtpServer.Port = Port; 
    SmtpServer.UseDefaultCredentials = false; 
    SmtpServer.Credentials = new System.Net.NetworkCredential(MailAddress, Pwd); 
    SmtpServer.EnableSsl = ssl; 
    try { 
     await SmtpServer.SendAsync(mail); 
     return "Send Successfully"; 
    } catch(Exception ex) { 
     return ex.Message; 
    } 
} 

Затем btn_ok() может выглядеть следующим образом:

protected async void btn_ok(object sender, EventArgs e) { 

try { 
    //**Job 1:** 
    CommonCls com = new CommonCls(); 
    com.SaveRecord(**Parameter Values**); 

    //Note :after save this, it must exit from this function and update Message to web Application Screen 

    //**Job 2** 
    EmailDAL em = new EmailDAL(); 
    ..... 
    ..... 

    try { 
     await em.SendEmailAsync(PTEmail, "Appointment Rescheduled ", "Dear " + PTName + "<br> &nbsp;&nbsp;&nbsp;&nbsp; Appointment with " + PName + " referred by " + GPName + " has been rescheduled " + Stime + ". <br> with Regards <br> <b>" + GPName + "</b>" + axolbl); 
    } 
    catch (Exception ex) { logger.Error(ex.ToString()); } 
     try { 
      await em.SendEmailAsync(PEmail, "Appointment Rescheduled ", "Dear " + PName + "<br> &nbsp;&nbsp;&nbsp;&nbsp; Appointment for " + PTName + "(" + PTCode + ") referred by " + GPName + " has been rescheduled " + Stime + ". <br> with Regards <br> <b>" + GPName + "</b>" + axolbl); 
     } 
     catch (Exception ex) { logger.Error(ex.ToString()); } 
     try { 
      await em.SendEmailAsync(GPEmail, "Appointment Rescheduled ", "Dear " + GPName + "<br> &nbsp;&nbsp;&nbsp;&nbsp; Appointment for " + PTName + "(" + PTCode + ") with " + PName + " has been rescheduled " + Stime + ". <br> with Regards <br> " + axolbl); 
     } 
     catch (Exception ex) { logger.Error(ex.ToString()); } 
    } 
    catch (Exception ex) { } 
} 

проверить ссылку ниже, чтобы прочитать больше об использовании метода SmtpClient.SendAsync и как получить обновления когда электронная почта закончила передачу.

https://msdn.microsoft.com/en-us/library/x5x13z6h(v=vs.110).aspx

Теперь нам еще нужно посмотреть, что CommonCls.SaveRecord() выглядит как сделать, что один асинхронный.

** Оригинал ответа Вы можете попробовать использовать Task.WhenAny() вместе с async и await. Он вернется, как только закончится одно задание, но затем оно по-прежнему будет продолжать вторую работу. Хотя я не могу сказать, в какой версии .NET вы работаете.

Ниже приведена статья MSDN. Надеюсь, это поможет: https://msdn.microsoft.com/en-us/library/jj155756.aspx

+0

Привет, я использую 4.0 ... Но я не могу понять код из этой ссылки. https://msdn.microsoft.com/en-us/library/jj155756.aspx Пожалуйста, ответьте на мой пост. –

+0

Являются ли ваши методы '.SaveRecord()' и 'SendEmail()' async? И они возвращают 'Задачу '? – hvaughan3

+0

Я не знаю, как справиться с этим .. Но мне нужно Решение. –

Смежные вопросы