- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试编写一个辅助类来在我的 C# 应用程序中发送电子邮件。我想使用 SmtpClient.SendAsync
,但显然我不了解异步的工作原理或者我设置了错误:
public class EmailService
{
public static void SendMessage(MailMessage message)
{
var client = new SmtpClient("127.0.0.1", 25);
client.SendCompleted += (s, e) =>
{
if (e.Error != null)
{
// TODO: Log the SMTP error somewhere
}
var callbackClient = s as SmtpClient;
var callbackMessage = e.UserState as MailMessage;
callbackClient.Dispose();
callbackMessage.Dispose();
};
client.SendAsync(message, message);
}
}
这会导致以下异常:
An asynchronous operation cannot be started at this time. Asynchronous operations may only be started within an asynchronous handler or module or during certain events in the Page lifecycle. If this exception occurred while executing a Page, ensure that the Page is marked <%@ Page Async="true" %>. This exception may also indicate an attempt to call an "async void" method, which is generally unsupported within ASP.NET request processing. Instead, the asynchronous method should return a Task, and the caller should await it.
基于这个异常,听起来我的SendMessage
方法可能需要返回一个Task
。但是,client.SendAsync
返回 void,因此似乎没有任何要返回或 await
的 Task
。
最佳答案
使用async
方法,您的方法必须标记为 async
(一直向上调用堆栈)。当你有异步方法时,你真的想避免有一个 void 返回类型。大多数时候你应该返回 Task
(或者 Task<T>
如果你的方法有一个现有的返回类型)。您还应该使用 SendMailAsync它使用新的基于任务的异步方法。最后,您需要 await
您对异步方法的调用。
public class EmailService
{
public static async Task SendMessage(MailMessage message)
{
using (var client = new SmtpClient("127.0.0.1", 25))
{
await client.SendMailAsync(message, message);
}
}
}
在 Web 窗体中使用异步有点棘手。您必须将页面标记为异步。
<%@ Page Async="true" %>
您会注意到 Web 窗体的一件事是您无法更改方法以返回 ASP.NET 生命周期事件的任务。所以你需要注册这个任务。
public void Page_Load(object sender, EventArgs e)
{
RegisterAsyncTask(new PageAsyncTask(SendMessage));
}
但是,我们需要能够将消息传递给函数。所以我们将使用 lambda。
public void Page_Load(object sender, EventArgs e)
{
RegisterAsyncTask(new PageAsyncTask(() => EmailService.SendMessage(message)));
}
关于来自静态帮助程序方法的 C# SmtpClient SendAsync?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28750953/
我有一个使用 *Async 方法(如 SendAsync)通过套接字进行通信的应用程序。我在执行 SendAsync 但未通过网络发送数据时遇到这种奇怪的行为。 我已启用网络跟踪并获得以下日志: Sy
我编写了一个小 winforms 应用程序,它向本地网络中的每个 IP 地址发送 http 请求,以发现我的某个设备。在我的特定子网掩码上,有 512 个地址。我已经使用 backGroundWork
我一直在关注this VSTF_RD_Bot example code . 我无法构建此代码,因为我收到以下消息: The type arguments for method 'Conversatio
如以下简化代码所示,检查 SendAsync() 是否已完成缓冲区中所有预期字节的传输是正确的做法吗?还是那是多余的?这是一个 TCP 连接套接字。我特别担心必须在 ProcessSend() 中发出
在使用 SendAsync 时处理 SmtpClient 和 MailMessage 的正确方法是什么? 我已经在下面复制了我的代码。 { ... var client = new SmtpClien
我正在使用 SendAsync 方法循环发送 1000 条消息,并在这行代码中得到下面的异常 await _ws.SendAsync(new ArraySegment(messageBuffer, o
In asp.net - using Message Handlers - 我可以通过添加消息处理程序来自定义请求/响应。 因此,一个请求进入,通过多个消息处理程序,然后响应通过相同的处理程序(在相反
我正在调用以下函数来获取访问 token ,以便使用 REST Api 检索 Twitter 用户个人资料。 public async Task GetAccessToken() {
我刚刚编写了一些测试代码来查看 System.Net.Mail.SmtpClient 向我自己发送相同的消息。 int numClients = 10; List mailClients = new
我正在尝试使用 Atomix 在 Java 的两个进程之间发送消息和 Netty 。我有一个名为 Starter 的程序,它负责向所有正在等待该消息的正在运行的进程发送消息。 这是入门版: Addre
我正在尝试用 C# 构建一个小型应用程序,以从 Microsoft Graph API 检索建议的 session 时间。身份验证后,我调用 graphClient.HttpProvider.Send
我正在尝试编写一个辅助类来在我的 C# 应用程序中发送电子邮件。我想使用 SmtpClient.SendAsync,但显然我不了解异步的工作原理或者我设置了错误: public class Email
在我的应用程序中,我使用 Dataflow 库中的 ActionBlock,使用 SmtpClient.SendAsync() 发送电子邮件警报方法,它不会阻止调用线程。(ActionBlock 从
应用程序要求使用 SendAsync 而不仅仅是发送。所以我制作了一个 CEmailServer 类并设置了所有内容。到目前为止, Send 工作正常,但是当将其更改为与 SendAsync 一起使用
我有一个 Websocket HTTPListener 作为服务器,客户端是 WebSocket的 我将所有当前客户端保存在一个列表中,我想要一个向所有客户端异步发送信息的函数。 所以我目前拥有的是:
我正在尝试优化一个 tcp 套接字包装器,它在处理大量入站连接时遇到了困难。我正在一个基本的聊天服务器和一个小型客户端应用程序中测试它以将客户端发送给它。这两个应用程序都位于通过千兆交换机连接的单独
我正在尝试熟悉 smtp.SendAsync,但出于某种原因,我无法让邮件消息发送异步。 这是我试过的。 //smtp.SendAsync(mm, null)); Error, Async opera
我正在摆弄 Silverlight 的 TCP 通信,我被迫使用 System.Net.Sockets.Socket 类,它在 Silverlight 运行时只有异步方法。 我想知道如果两个线程在很短
我正在使用 .NET 4.0 的 ASP.NET Web API 客户端库(Microsoft.AspNet.WebApi.Client 版本 4.0.30506.0)。 我需要发送带有请求正文的 H
我有一个接口(interface),它有一个方法来创建队列客户端和消息工厂的实例。我已经创建了相同的具体实现,现在我正在尝试对用于将消息发送到队列的功能进行单元测试。我已经为相同的代码编写了以下代码:
我是一名优秀的程序员,十分优秀!