每次循环迭代ASP.NET时,从C#循环到客户端异步发布值

时间:2017-05-03 13:05:40

标签: c# asp.net ajax twilio

我正在使用Twilio使用ASP.NET网络应用发送短信。按下提交按钮后我正在使用重定向后发送消息。 当第二页完全加载时,我希望每次发送邮件时更新客户端,并显示结果和收件人。这将需要异步,避免页面刷新或回发。每次方法循环并返回结果和收件人时,处理客户端更新的最佳方法是什么?我想在UI中附加收件人以显示谁正在接收邮件。与此类似:

您的讯息正在发送......

成功送到John Doe 成功送到Elvis Pressley
发送给Grace Hopper时发生了问题

    foreach (var recipient in recipients)
    {
        SendMessage(recipient);
    }

    public string SendMessage(Recipient recipient)
    {
        // I want to update the client with either of these return statements
        // every time the method is called in the loop.
        if (twilioMessage.Send(recipient.PhoneNumber, message)
        {
            return "Successfully sent to " + recipient.Name;
        }
        else
        {
            return "There was a problem sending to " + recipient.Name;
        }
    }

1 个答案:

答案 0 :(得分:1)

对于包含for循环的方法,它应该有一个IEnumerable返回类型,你应该使用关键字" yield"。您的代码看起来像这样:

public IEnumerable<string> DoMyThing()
{
    foreach (var recipient in recipients)
    {
        yield return SendMessage(recipient);
    }
}

然后当你打电话给#34; DoMyThing()&#34;每次移动到下一个元素时返回一个IEnumerable,执行返回到函数,下一条消息将尝试发送,你将收到结果,你可以用它做一件事。

至于如何将这些信息传回客户端,UpdatePanel可能是您最好的选择。

Light reading on yield keyword