【发布时间】:2021-07-29 12:47:14
【问题描述】:
我在理解有关 C# 中的异步编程的细节时遇到问题。
假设我有一个通用的异步方法,其中包含一些等待语句。假设我有另一个方法,它不是异步的,而是调用第一个方法。
public void DoSomething(){
DoSomethingAsync()
...
}
public async Task DoSomethingAsync(){
...
await ...
...
}
我知道我可以只使用Wait() 或其他一些同步技术,但我不只是想在不知道会发生什么的情况下抛出问题。
DoSomething 会在DoSomethingAsync 完成之前继续执行吗?我知道如果将DoSomething 声明为async,就会发生这种情况,但事实并非如此。
或者更笼统地说:同步方法可以在异步子调用完成之前继续执行吗?
【问题讨论】:
-
要清楚 -
async对方法所做的唯一事情(通过一些手波)是允许您在方法中使用await。没有其他的。如果它实际上不包含任何await语句,它不会改变该方法的工作方式。 -
DoSomethingAsync将同步运行到第一个await。那时它将返回一个Task。请注意,根据 Damian,如果DoSomething被声明为async,会发生完全相同的事情——唯一的区别是您可以在生成的任务上使用await。
标签: c# asynchronous