【发布时间】:2013-07-22 06:27:12
【问题描述】:
认为您可能误解了异步的作用。警告是 完全正确:如果您将方法标记为异步但不使用 await 任何地方,那么您的方法将不会是异步的。如果你叫它,所有 方法里面的代码会同步执行。
我想编写一个应该运行异步但不需要使用等待的方法。例如在使用线程时
public async Task PushCallAsync(CallNotificationInfo callNotificationInfo)
{
Logger.LogInfo("Pushing new call {0} with {1} id".Fill(callNotificationInfo.CallerId,
}
我想打电话给PushCallAsync 并运行异步并且不想使用等待。
我可以在 C# 中使用 async 而不使用 await 吗?
【问题讨论】:
-
好吧。这完全取决于您的设计问题,在这里。你希望“异步”做什么?
-
如果你不打算等待这个方法,为什么还要声明它是异步的呢?您引用的文字很好地总结了 IMO。
-
我想你直接用
Task.Run就好了。async/await并不是真正的多线程机制,实际上我认为运行时在尽可能少的线程上执行操作。它主要是关于编译器自动将您的代码转换为连续传递样式,因此您仅在绝对必要时等待结果(或完成)后台操作。如果您不需要等待(或await)呼叫结果,这不是您正在寻找的语言功能。 -
@millimoose:
async与线程交互的方式有点复杂,并且可以轻松覆盖默认行为。async不是多线程机制,也不总是在单线程上运行。 I have a blog post that summarizes howasyncschedules its continuations. -
@millimoose:不是实现细节。它已明确指定 - 并且必须如此,因此它的行为始终是可预测且可靠的(一旦您了解了机制)。
标签: c# task-parallel-library async-await c#-5.0