我有以下代碼將 json api 放在 grpc 服務上。ValueTask釋放服務激活器句柄時回傳A。代碼 linting 建議應該等待此代碼,但是當我重構以使用該DisposeAsync模式時MapControllers會引發例外(“DisposeAsync 沒有屬性路由”)。
[ApiController]
public class GatewayController : Controller, IAsyncDisposable
{
private readonly GrpcService _grpcService;
private readonly IGrpcServiceActivator<GrpcService> _serviceActivator;
private readonly GrpcActivatorHandle<GrpcService> _activatorHandle;
public GatewayController(
IGrpcServiceActivator<GrpcService> serviceActivator,
IServiceProvider serviceProvider)
{
_serviceActivator = serviceActivator;
_activatorHandle = serviceActivator.Create(serviceProvider);
_grpcService = _activatorHandle.Instance;
}
public async ValueTask DisposeAsync()
{
await DisposeAsyncCore();
Dispose(false);
GC.SuppressFinalize(this);
}
protected virtual async ValueTask DisposeAsyncCore()
{
// returns a ValueTask that is warned as "should be awaited"
await _serviceActivator.ReleaseAsync(_activatorHandle);
}
}
你如何DisposeAsync在一個上實作ApiController?
uj5u.com熱心網友回復:
使用NonActionAttribute:
指示控制器方法不是操作方法。
[NonAction]
public async ValueTask DisposeAsync()
{
...
}
或顯式介面實作:
async ValueTask IAsyncDisposable.DisposeAsync()
{
...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/465774.html
