我希望从Web api应用程序(Program.cs和Startup.cs)开始就可以轻松实现异步
这是做事的不好方法吗?我找不到简单的方法。 我想一直保持异步,这不是很容易吗?
换句话说,我想在Startup.cs文件中使用“等待”。
Startup.cs是默认模板的一部分,因此我不习惯替换它,但是也许还有另一种“异步”方式来做事。
这里的主要需求是,这样我就可以在Startup.cs逻辑期间调用KeyVault(GetSecretAsync),避免死锁线程问题。
答案 0 :(得分:2)
您的意思不清楚,但ASP.NET Core本质上是异步的(默认情况下它会创建一个具有多个线程的线程池。)如果您希望各个API方法都是异步的,则只需要用这种方式编码。 MVC ControllerBase类支持异步操作方法,因此您所需要做的就是从操作方法中返回Task<IActionResult>
而不是IActionResult
。在Program.cs或Startup.cs中无需更改即可启用该功能。
也没有办法强制所有动作方法都是异步的,这也不是一个好主意。固有地将在单个线程上执行的操作(并且没有长时间的IO等待)最好阻止该线程,直到它们返回为止,否则最终将导致很多非常昂贵的上下文切换而没有任何好处。
如果要在Program或Startup类中执行要并行化的操作,则可以使用Task和/或Threading库执行此操作,并阻塞直到所有并行任务完成。但是,在启动时需要做很多工作是非常不寻常的,并且建议您可能需要对设计进行一些重新思考。
最后,如果您要创建连续运行的后台任务,则ASP.NET Core中唯一的机制是HostedService。但是取决于您要完成的工作,ASP.NET Core可能只是该工作的错误工具。
答案 1 :(得分:2)
您需要做的只是在csproj
文件中,将LangVersion
设置为7.1
。如果愿意,也可以使用Latest
。
<PropertyGroup>
<LangVersion>7.1</LangVersion>
</PropertyGroup>
然后使Main方法异步
static async Task Main(string[] args) {
//some async code goes here
}