C# SmtpClient.Timeout属性是否适用于异步调用?

C# SmtpClient.Timeout属性是否适用于异步调用?,c#,asp.net,.net,smtp,C#,Asp.net,.net,Smtp,在中,它表示获取或设置一个值,该值指定同步发送调用超时的时间量。 这对异步调用不起作用吗?有时我的调用花费的时间太长,我需要它们的最大超时时间。如何使用async实现这一点?通常,可以使用CancellationTokenSource实现这一点,并在构建时延迟提交。但是,基于任务的SendMailAsync似乎不支持取消,但有一种方法(sendayncCancel)可用于终止异步发送。您可以将其与过期的CancellationTokenSource组合使用: async Task Send()

在中,它表示
获取或设置一个值,该值指定同步发送调用超时的时间量。


这对异步调用不起作用吗?有时我的调用花费的时间太长,我需要它们的最大超时时间。如何使用async实现这一点?

通常,可以使用
CancellationTokenSource
实现这一点,并在构建时延迟提交。但是,基于任务的
SendMailAsync
似乎不支持取消,但有一种方法(
sendayncCancel
)可用于终止异步发送。您可以将其与过期的
CancellationTokenSource
组合使用:

async Task Send()
{
    using(SmtpClient c = new SmtpClient())
    using(var cts = new CancellationTokenSource(30000))
    {
        cts.Token.Register(c.SendAsyncCancel);
        await c.SendMailAsync("a@a.a","b@b.b","foo","bar");
    }
}

唯一的问题是,您会得到一个
TaskCanceledException
,而不是正常的
SmtpException
,如果需要错误的状态代码,您需要它reporting@BCA在超时的情况下,此状态代码将从何而来?超时的全部原因是服务器没有响应。通常情况下,如果我设置了错误的密码,然后调用
SendMailAsync()
,大约10秒后它将失败,并出现
SmtpException
。我来到这个页面是因为我想把它缩短到5秒,而设置
超时
并不能起作用。您的解决方案确实完成了缩短,但现在您当然不知道失败的原因。@BCA您将在客户端发生的事件与在服务器上发生的事件混淆了。如果服务器用10秒钟告诉您密码无效,那么您在客户端所做的任何操作都不会加快速度。超时是指您放弃对服务器的任何回复的希望的时刻。我怀疑您正在研究一种阻止暴力密码攻击的节流机制。这再次发生在服务器上。这是你无法控制的我意识到这是离题的,但是你知道如何将服务器的错误密码响应缩短到5秒吗?