C# 成功发送电子邮件,但为什么c计划获胜';是否继续下一步或完成?

C# 成功发送电子邮件,但为什么c计划获胜';是否继续下一步或完成?,c#,asynchronous,task,C#,Asynchronous,Task,调试模式下,在var response=wait client.sendmailasync(mail)之后。 程序的其余部分无法再运行 如何解决这个问题 class Program { private SqlConnection dbConnection; private DBSetting dbSetting; private UserSession usession; static void Main(string[] args) {

调试模式下,在
var response=wait client.sendmailasync(mail)之后。
程序的其余部分无法再运行

如何解决这个问题

class Program
{
    private SqlConnection dbConnection;
    private DBSetting dbSetting;
    private UserSession usession;

    static void Main(string[] args)
    {




        SqlConnection myConnection = new SqlConnection(xxxxxAPIURL);
        myConnection.Open();

        Program program = new Program(myConnection, dbSetting, usession);

        string emailcontent = "";

        foreach (string targetDB in ipArray)
        {



            // Extra ItEM Type
            DataTable DT_ExtraItemType = program.GetExtraItemTypeFromTarget(SQLDBName, targetDB);

            emailcontent += "<br /> <br />Extra Item Type from " + targetDB;

            string extraitemtypemsg = "";

            foreach (DataRow DataTable_ExtraItemtype in DT_ExtraItemType.Rows)
            {
                string msg = "";

                string extra_targetdb = targetDB.ToString();
                string extra_ItemType = DataTable_ExtraItemtype["ItemType"].ToString();

                msg = "<br />In " + extra_targetdb + " ,ItemType: " + extra_ItemType;

                emailcontent += msg;
            }

            //AutoSendMessage(extraitemtypemsg, targetDB).Wait();


            DataTable DT_ExtraItemCategory = program.GetExtraItemCategoryFromTarget(SQLDBName, targetDB);

            emailcontent += "<br /> <br />Extra Item Category from " + targetDB;

            string extraitemcategoryemsg = "";
            foreach (DataRow DataTable_ExtraItemCategory in DT_ExtraItemCategory.Rows)
            {
                string msg = "";
                string extra_targetdb = targetDB.ToString();
                string extra_ItemCategory = DataTable_ExtraItemCategory["ItemCategory"].ToString();

                msg = "<br />In " + extra_targetdb + " ,Item Category: " + extra_ItemCategory;
                //extraitemcategoryemsg += msg;
                emailcontent += msg;
            }

            emailcontent += "<br /> <br />Extra ItemCode from " + targetDB;


            DataTable DT_AddNewItem = program.GetNewItem(SQLDBName, targetDB);

            foreach (DataRow DataTable_AddNewItem in DT_AddNewItem.Rows)
            {
                string addnewitem_itemcode = DataTable_AddNewItem["ItemCode"].ToString();
                string result = program.AddNewItem(addnewitem_itemcode, dbSetting, usession, targetdbSetting, targetusession);

                if (result != "success!")
                    Console.WriteLine("Fail to Create New Item " + addnewitem_itemcode + " .\n" + result.ToString());
                else Console.WriteLine(result.ToUpper() +"New Item Created : "+ addnewitem_itemcode + " .");
            }
        }

        program.AutoSendMessage(emailcontent).Wait();
    }

    public Program(SqlConnection connection, DBSetting dbset, UserSession users)
    {
        dbConnection = connection;
        dbSetting = dbset;
        usession = users;
    }


    //DataTable Extra Item Type from TargetDB and mention User to Check/Remove It manually
    private DataTable GetExtraItemTypeFromTarget(string SourceDB, string targetDB)
    {
        DataTable dt = new DataTable();

        string sql = "select t.ItemType ItemType from " + targetDB + ".dbo.ItemType t where " +
        "not exists(select * from " + SourceDB + ".dbo.ItemType s where t.ItemType = s.ItemType) ";
        SqlCommand ExtraItemTypeCommand = new SqlCommand(sql, dbConnection);//using myconnection
        ExtraItemTypeCommand.CommandTimeout = 180; /*Excute Time Out Second*/
        SqlDataReader ExtraItmeTypeReader = ExtraItemTypeCommand.ExecuteReader();
        dt.Load(ExtraItmeTypeReader);

        return dt;

    }

    // DataTable Extra Item Category from TargetDB and mention User to Check/Remove It manually
    private DataTable GetExtraItemCategoryFromTarget(string SourceDB, string targetDB)
    {
        DataTable dt = new DataTable();

        string sql = "select t.ItemCategory ItemCategory from " + targetDB + ".dbo.ItemCategory t where " +
        "not exists(select * from " + SourceDB + ".dbo.ItemCategory s where t.ItemCategory = s.ItemCategory) ";
        SqlCommand ExtraItemTypeCommand = new SqlCommand(sql, dbConnection);//using myconnection
        ExtraItemTypeCommand.CommandTimeout = 180; 
        SqlDataReader ExtraItemCategoryReader = ExtraItemTypeCommand.ExecuteReader();
        dt.Load(ExtraItemCategoryReader);

        return dt;

    }


    private static  async Task AutoSendMessage(string Message)
    {

        try
        {

            var client = new SendGridClient("API_KEY");


            var from = new EmailAddress("xxxxxx", "xxxxxxx");
            var subject = "Extra Information from API_Item Master(Item, ItemCode, Item Category) Program ";
            var messagedetail = Message;
            var to = new EmailAddress("xxxxxxxx", "xxxx");
            var plainTextContent = "Hello, Email from the helper !" + messagedetail;
            var htmlContent = "<strong>Please check the Following Information:- </strong>" + messagedetail;




            var mail = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);
            var response = await client.SendEmailAsync(mail);

        }
        catch(Exception ex) 
        {
                Console.WriteLine(ex.Message);
        }

    }
}
类程序
{
私有SqlConnection-dbConnection;
私人数据库;
私有用户会话使用;
静态void Main(字符串[]参数)
{
SqlConnection myConnection=新的SqlConnection(xxxxx apiURL);
myConnection.Open();
程序=新程序(myConnection、dbset、usession);
字符串emailcontent=“”;
foreach(ipArray中的字符串targetDB)
{
//额外项目类型
DataTable DT_ExtraItemType=program.GetExtraItemTypeFromTarget(SQLDBName,targetDB);
emailcontent+=“

来自“+targetDB”的额外项目类型; 字符串extraitemtypemsg=“”; foreach(DT_ExtraItemtype.Rows中的DataRow DataTable_ExtraItemtype) { 字符串msg=“”; 字符串extra_targetdb=targetdb.ToString(); 字符串extra_ItemType=DataTable_ExtraItemtype[“ItemType”]。ToString(); msg=“
在“+extra_targetdb+”中,ItemType:“+extra_ItemType; emailcontent+=msg; } //AutoSendMessage(extraitemtypemsg,targetDB).Wait(); DataTable DT_ExtraItemCategory=program.GetExtraItemCategoryFromTarget(SQLDBName,targetDB); emailcontent+=“+targetDB”中的“

额外项目类别; 字符串ExtraItemCategoryEmg=“”; foreach(DT_ExtraItemCategory.Rows中的DataRow DataTable_ExtraItemCategory) { 字符串msg=“”; 字符串extra_targetdb=targetdb.ToString(); 字符串extra_itemcegory=DataTable_extraitemcegory[“itemcegory”]。ToString(); msg=“
在“+extra_targetdb+”中,项目类别:“+extra_ItemCategory; //ExtraItemCategoryEMG+=味精; emailcontent+=msg; } emailcontent+=“

来自“+targetDB”的额外项目代码; DataTable DT_AddNewItem=program.GetNewItem(SQLDBName,targetDB); foreach(DT_AddNewItem.Rows中的DataRow DataTable_AddNewItem) { 字符串addnewitem_itemcode=DataTable_addnewitem[“itemcode”]。ToString(); 字符串结果=program.AddNewItem(AddNewItem_itemcode,dbSetting,usession,targetdbSetting,targetusession); 如果(结果!=“成功!”) Console.WriteLine(“未能创建新项”+addnewitem\u itemcode+”\n“+result.ToString()); else Console.WriteLine(result.ToUpper()+“创建的新项:”+addnewitem_itemcode+); } } program.AutoSendMessage(emailcontent).Wait(); } 公共程序(SqlConnection连接、DBSetting数据库集、UserSession用户) { dbConnection=连接; dbset=dbset; usession=用户; } //TargetDB中的DataTable额外项类型,并提示用户手动检查/删除它 私有数据表GetExtraItemTypeFromTarget(字符串SourceDB,字符串targetDB) { DataTable dt=新的DataTable(); string sql=“从“+targetDB+”.dbo.ItemType t where”中选择t.ItemType ItemType”+ “不存在(从“+SourceDB+”.dbo.ItemType s中选择*,其中t.ItemType=s.ItemType)”; SqlCommand ExtraItemTypeCommand=新的SqlCommand(sql,dbConnection);//使用myconnection ExtraItemTypeCommand.CommandTimeout=180;/*执行超时秒*/ SqlDataReader ExtraItmeTypeReader=ExtraItemTypeCommand.ExecuteReader(); dt.负载(ExtraItmeTypeReader); 返回dt; } //TargetDB中的DataTable额外项目类别,并提醒用户手动检查/删除它 私有数据表GetExtraItemCategoryFromTarget(字符串SourceDB,字符串targetDB) { DataTable dt=新的DataTable(); string sql=“从“+targetDB+”.dbo.itemcegory t where”中选择t.itemcegory itemcegory”+ “不存在(从“+SourceDB+”.dbo.ItemCategory s中选择*,其中t.ItemCategory=s.ItemCategory)”; SqlCommand ExtraItemTypeCommand=新的SqlCommand(sql,dbConnection);//使用myconnection ExtraItemTypeCommand.CommandTimeout=180; SqlDataReader ExtraItemCategoryReader=ExtraItemTypeCommand.ExecuteReader(); dt.荷载(ExtraItemCategoryReader); 返回dt; } 专用静态异步任务AutoSendMessage(字符串消息) { 尝试 { var客户端=新的SendGridClient(“API_键”); var from=新电子邮件地址(“xxxxxx”、“xxxxxx”); var subject=“API_物料主数据(物料、物料代码、物料类别)程序的额外信息”; var messagedetail=消息; var to=新的电子邮件地址(“xxxxxxxx”、“xxxx”); var plainTextContent=“你好,来自帮助者的电子邮件!”+messagedetail; var htmlContent=“请检查以下信息:-”+消息详细信息; var mail=MailHelper.CreateSingleEmail(发件人、收件人、主题、明文内容、htmlContent); var response=wait client.sendmailasync(邮件); } 捕获(例外情况除外) { 控制台写入线(例如消息); } } }

}问题:这可能是因为您正在阻止UI线程。但是因为你还没有分享完整的代码,所以我不确定

修复:在通话中尝试配置等待(false)

var response = await client.SendEmailAsync(mail).ConfigureAwait(false);
链接:

如果您使用的是C#7.1语言功能(您可能必须通过编辑.csproj来启用这些功能),则可以使用异步Main方法:

static async Task Main(string[] args)
{
    await program.AutoSendMessage(emailcontent);
}
为了启用C#7.1功能,我需要编辑我的.csproj文件

  • 用记事本打开你的.csporj
  • 查找
    某物