没有 await 语句的 c# 异步任务
c# async task with no await statement
我刚刚开始使用 C# 开发,我一直在与异步编程作斗争,我对异步执行任务有疑问。
我有自己的服务可以发送电子邮件(不详细介绍但它的工作原理)并且我希望该方法的执行异步运行,我一直在阅读有关异步和等待的 msdn 文档。
我确实想异步发送它,但我不关心结果,我的意思是我不想指定 await 语句。当我阅读文档
时,我正要尝试不使用它
If an async method doesn’t use an await operator to mark a suspension point, the method executes as a synchronous method does, despite the async modifier.
所以我怀疑是,是吗?有没有办法实现我正在寻找的东西,或者这样做是一种糟糕的 pactice/idea 想法。我希望我说清楚了。谢谢
关于您在文档中阅读的内容,请这样思考:
public async Task OuterMethod()
{
InnerMethod();
}
您已标记 OuterMethod async
,但您没有进行任何等待。文档只是说 OuterMethod 将 运行 同步,您也可以将其标记为 void
而不是 async Task
。然而,OuterMethod 运行s 同步的事实并没有改变 InnerMethod 的性质;它很可能是异步的,如果您不等待它,它将 运行 即发即弃的风格,很可能在后台线程上。
在您的特定情况下,InnerMethod 将是发送电子邮件的方法。如果你确定你不关心发送电子邮件是成功还是失败,我建议你直接调用SmtpClient.SendAsync而不等待。
我刚刚开始使用 C# 开发,我一直在与异步编程作斗争,我对异步执行任务有疑问。
我有自己的服务可以发送电子邮件(不详细介绍但它的工作原理)并且我希望该方法的执行异步运行,我一直在阅读有关异步和等待的 msdn 文档。
我确实想异步发送它,但我不关心结果,我的意思是我不想指定 await 语句。当我阅读文档
时,我正要尝试不使用它If an async method doesn’t use an await operator to mark a suspension point, the method executes as a synchronous method does, despite the async modifier.
所以我怀疑是,是吗?有没有办法实现我正在寻找的东西,或者这样做是一种糟糕的 pactice/idea 想法。我希望我说清楚了。谢谢
关于您在文档中阅读的内容,请这样思考:
public async Task OuterMethod()
{
InnerMethod();
}
您已标记 OuterMethod async
,但您没有进行任何等待。文档只是说 OuterMethod 将 运行 同步,您也可以将其标记为 void
而不是 async Task
。然而,OuterMethod 运行s 同步的事实并没有改变 InnerMethod 的性质;它很可能是异步的,如果您不等待它,它将 运行 即发即弃的风格,很可能在后台线程上。
在您的特定情况下,InnerMethod 将是发送电子邮件的方法。如果你确定你不关心发送电子邮件是成功还是失败,我建议你直接调用SmtpClient.SendAsync而不等待。