Приложение работает, но зависает при ожидании кода возврата API - PullRequest
1 голос
/ 24 марта 2020

Здравствуйте, ребята, у меня есть "странная проблема", мое приложение в основном почтовый клиент, и хотя оно работает нормально (ноль проблем или ошибок), когда задание asyn c завершено (отправка сообщения получателю, который он успешно получил) все приложение замораживается. Исправление, которое я использовал, - это удаление ключевого слова await из ответа API, который работает, НО вы не можете получить код, если сообщение успешно отправлено. Вот код

using System;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using SendGrid;
using SendGrid.Helpers.Mail;

namespace SendMailClass{
    internal class FunctionCall{

        #region Getting user info
        static bool EmailHasBeenSend = false;
        static string Documents = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\Documents.txt";
        static string UserName = File.ReadLines(Documents).Skip(0).Take(1).First();
        static string UserEmail = File.ReadLines(Documents).Skip(1).Take(1).First();
        #endregion

        public static void SendFunction(string Recipient, string SubjectVariable, string CC, string BCC, String Messange,string FileName, string AttachmentPath){
            Execute(Recipient, SubjectVariable ,CC,BCC, Messange ,FileName, AttachmentPath).Wait();
        }

        static async Task Execute(string Recipient, string SubjectVariable, string CC, string BCC, string Messange,string FileName,string AttachmentPath){

                #region Email Values
                var apiKey = Environment.GetEnvironmentVariable("InMail_Api_Key");
                var client = new SendGridClient(apiKey);
                var from = new EmailAddress(UserEmail, UserName);
                var subject = SubjectVariable == "" ? "(No subject)" : SubjectVariable;
                var to = new EmailAddress(Recipient);
                var plainTextContent = Messange == "" ? " " : Messange; ;
                var htmlContent = Messange;
                #endregion

                var Message = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);

                #region Attachment
                if (AttachmentPath != "") {
                    var bytes = System.IO.File.ReadAllBytes(AttachmentPath);
                    var File = Convert.ToBase64String(bytes);
                    Message.AddAttachment(FileName, File);
                }
                #endregion

                /*
                #region CC/BCC
                if (CC != "") { 
                    Message.AddCcs("anemail@example.com");
                }
                if (BCC != ""){
                Message.AddBccs("anemail@example.com")}
                #endregion
    */

                var response =await client.SendEmailAsync(Message);
              //var response =client.SendEmailAsync(Message); ---> the hotfix
        }
    }
}

После отладки я получаю только один результат:

отладчик: поток --- завершился с кодом 0 (0x0). точка останова: APIResponse равен NULL

Не имеет никакого смысла, почему оно вызывает зависание приложения.

Заранее спасибо за каждый повтор !!! !!! 1014 *

1 Ответ

0 голосов
/ 24 марта 2020

Я уже упоминал, что моим последним исправлением было: APIResponse = client.SendEmailAsyn c (Message);

Я обнаружил, что это решает проблему: APIResponse = await client.SendEmailAsyn c ( Сообщение) .ConfigureAwait (false);

Я хочу еще немного проверить его, прежде чем быть уверенным, что это лучшее решение. Пока что ответы Принято (если электронная почта в правильной форме) и ноль , если соединение не активно (нет inte rnet).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...