如何解决在ASP.NET Core
我正在尝试构建一个ASP.NET Core应用程序,该应用程序应以非托管代码的形式接收信息,并将此信息呈现给Web用户。当ASP.NET Core应用程序启动时,它将启动一个后台服务,该服务将在非托管代码中注册一个回调。
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).ConfigureServices(services =>
{
services.AddHostedService<ReadService>();
})
;
}
public class ReadService: BackgroundService
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void CSCALLBACK([In,MarshalAs(UnmanagedType.LPStr)] string a);
[DllImport("managed_service_wrapper",CallingConvention = CallingConvention.Cdecl)]
public static extern int SetCallback(CSCALLBACK callback);
public ReadService()
{
CSCALLBACK cb = OnNewUpdates;
var a = SetCallback(cb);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
//something
}
}
static void OnNewUpdates(string a)
{
//something
}
}
调用SetCallback函数时,非托管代码将开始侦听更新,但在开始侦听时将返回。
这还行吗?当回调被触发时,它将阻塞其余代码吗?我应该在OnNewUpdates中使用什么来通知ExecuteAsync有新的更新?
更新2020-11-02 也许我的问题不是很清楚,所以要更清楚:
解决方法
进一步研究之后,我意识到,就像@poke所说的那样,拥有BackgroundService是错误的,它只需要是一种“正常”服务即可。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。