C# SmtpClient.SendAsyncCancel方法在断开SMTP服务器连接时有延迟

C# SmtpClient.SendAsyncCancel方法在断开SMTP服务器连接时有延迟,c#,.net,wpf,smtp,smtpclient,C#,.net,Wpf,Smtp,Smtpclient,我一直在摆弄一个通用的C#WPF程序,它利用SmtpClient类和SendAsync()方法来模拟发送电子邮件。我遇到过这样一个场景:如果应用程序正在通过上述方法发送邮件,并且与Smtp服务器的连接丢失,那么在调用SendAsyncCancel方法后,似乎会有一个短暂的延迟(大约10到15秒),直到成功执行为止。然而,通常情况下,该方法会在一两秒钟内完成。现在我对这个主题的知识非常有限,所以它可能是SMTP的基本知识 非常感谢您提供的任何见解和信息 Smtp使用TCP作为传输层。TCP期望从每

我一直在摆弄一个通用的C#WPF程序,它利用SmtpClient类和SendAsync()方法来模拟发送电子邮件。我遇到过这样一个场景:如果应用程序正在通过上述方法发送邮件,并且与Smtp服务器的连接丢失,那么在调用SendAsyncCancel方法后,似乎会有一个短暂的延迟(大约10到15秒),直到成功执行为止。然而,通常情况下,该方法会在一两秒钟内完成。现在我对这个主题的知识非常有限,所以它可能是SMTP的基本知识


非常感谢您提供的任何见解和信息

Smtp使用TCP作为传输层。TCP期望从每个数据报(最多1500字节)得到确认,并且在重新发送数据报(最多三次)之前没有收到ack(最多等待5秒)。所以15秒是3 x 5秒。@jdweng有没有办法完全通过SendAsyncCancel方法停止数据报的等待和重新发送?没有。您只能更改3和5个参数。@jdweng在这种情况下,如果我想将重新发送尝试从3更改为2,将等待时间从5秒更改为3秒,我需要做什么?我发现更改的唯一方法是使用注册表: