我可以通过将控制台应用程序转换为 windows (worker) 服务来解决这个问题。
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<MyService>();
})
.ConfigureWebHostDefaults((builder) =>
{
builder.UseStartup<Startup>();
});
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddDaprClient();
}
public void Configure()
{
}
}
public class MyService: BackgroundService
{
private readonly DaprClient _dapr;
public PaymentService(DaprClient dapr)
{
_dapr = dapr;
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
await _dapr.PublishEventAsync();
await Task.Delay(1000, stoppingToken);
}
}
}