【问题标题】:An asynchronous call is already in progress. It must be completed or canceled before you can call this method异步调用已在进行中。必须先完成或取消才能调用此方法
【发布时间】:2021-09-09 07:42:21
【问题描述】:

我们正在使用 Azure 函数计时器触发器。

这是任务流程。我正在获取一些数据,创建该数据的文件并将其上传到 AWS,然后将通知发送给特定人员以通知有关文件。

我遇到的问题是“异步调用已在进行中。必须先完成或取消才能调用此方法”,当我们遇到此问题时,通知不会发送给收件人。虽然文件有每次都正确创建并上传到 AWS。

这是我正在使用的代码

public async Task ProcessData()
        {
            try
            {
                // Get data
                var data = await _process1.GetData();
                if (data != null && data.Count > 0)
                {
                    var id = 100;
                    var fileDisplayName = "file1";

                    // Process file for data
                    await _files.CreateAndUploadFileToAWS(data, id, fileDisplayName);

                    // Send Notification
                    await _notification.SendNotification(id, data.count, fileDisplayName);
                }
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }

这里是发送邮件功能

public async Task SendNotification(int id, int noOfRecords, string displayName)
        {
            try
            {
                // Get recipients for mail
                var recipients= await _person.GetRecipients(id);
        
                // Send notification
                var subject = "Email Notification";
                var message = "message";
                if (!string.IsNullOrEmpty(subject) && !string.IsNullOrEmpty(message) && recipients.Count > 0)
                    await _mails.SendEmail(recipients, subject, message);
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }

注意:我们经常遇到这个问题,但不是一直,有时它会发送通知,有时会显示错误。

请帮帮我。

谢谢

【问题讨论】:

  • 不要这样做throw new Exception(e.Message); - 你刚刚丢失了堆栈跟踪,而这正是我们(和你)所需要的
  • 可以发一下CreateAndUploadFileToAWS的实现吗?
  • 每当您写catch (Exception e) 时,您都可能会吞下各种异常。不要这样做。您应该只捕获您可以有意义地处理的特定异常。
  • 除了信息不足和调试问题,看看有没有帮助stackoverflow.com/questions/50036795/…

标签: c# .net azure azure-functions


【解决方案1】:

在我看来,问题出在SendEmail 方法中。 我的假设是问题在于您使用的是SmtpClient,它会阻止同时执行多个异步操作。

关于异常处理的一般说明。您可能应该替换异常消息抛出,因为您将无法看到有助于深入调查问题的堆栈跟踪。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多