C# .net核心web api控制器生命周期
您好,我了解注入服务的生命周期,比如scoped,在请求完成后,服务不可用。但是参数(如示例中的myObject)在它们被销毁时是什么?如果我将此参数传递给长异步任务,并且不等待结果,那么任务中可能会出现null问题C# .net核心web api控制器生命周期,c#,asp.net-core-webapi,C#,Asp.net Core Webapi,您好,我了解注入服务的生命周期,比如scoped,在请求完成后,服务不可用。但是参数(如示例中的myObject)在它们被销毁时是什么?如果我将此参数传递给长异步任务,并且不等待结果,那么任务中可能会出现null问题 public class mycontroller : ControllerBase { private MyService _myservice; public mycontroller(MyService myservice) { _m
public class mycontroller : ControllerBase
{
private MyService _myservice;
public mycontroller(MyService myservice)
{
_myservice = myservice;
}
[HttpPost]
public IActionResult Post([FromBody] MyObject myObject)
{
_myservice.dosomethinglongasync(myObject);
return OK();
}
}
任务将继续保留对
myObject
的引用,直到完成为止。你不应该面对一个事先就被摧毁的问题
但是这是一个糟糕的设计。您无法检查任务是否完成等。在不等待异步任务的情况下启动它们是不好的做法。正常的.net对象生命周期规则适用。一旦不再有引用,实例将被GCed。至于如何在asp.net内核中执行fire/forget操作,还有一些关于这方面的介绍。