Dis*_*ile 1 .net c# asynchronous task-parallel-library async-await
如果我编写一个只包装异步方法的方法,例如:
public async Task WrapMethodAsync()
{
using(var smtpClient = new SmtpClient())
{
await smtpClient.SendMailAysnc(new MailMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
这与执行以下操作相同:
public Task WrapMethodAsync()
{
using(var smtpClient = new SmtpClient())
{
return smtpClient.SendMailAysnc(new MailMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
或者后者实际上不是异步运行?
在这种情况下,由于范围的原因,这两种情况极为不同using
.
在第一种情况下,您等待(异步)以便SendMailAysnc
在处理客户端之前完成操作,而在另一种情况下,您不会在操作仍在运行时丢弃客户端.
在一般情况下,一般行为没有差异.例如:
public async Task Run()
{
throw new Exception("stored");
await Task.Delay(-1);
}
Run Code Online (Sandbox Code Playgroud)
VS这个:
public Task Run()
{
throw new Exception("thrown");
return Task.Delay(-1);
}
Run Code Online (Sandbox Code Playgroud)
不同之处在于该async
方法对整个机制(包括状态机)有轻微的开销,async
而非async
任务返回方法具有不同的异常语义,因为异常直接抛出而不存储在返回的任务中.
归档时间: |
|
查看次数: |
95 次 |
最近记录: |