我有一个ServiceBusClient
类,它创建一个QueueClient
用于在公共汽车上收听消息的类。我查看了以下文章来进行设置:
我的ServiceBusClient
类处理QueueClient
看起来像这样:
public class ServiceBusClient : IServiceBusClient
{
public ServiceBusClient(IEventService eventService, ServiceBusClientOptions options)
{
...
queueClient = new QueueClient(options.ConnectionString, options.QueueName);
}
public void Run()
{
RegisterOnMessageHandler();
}
private void RegisterOnMessageHandler()
{
...
queueClient.RegisterMessageHandler(ProcessMessagesAsync, messageHandlerOptions);
}
private async Task ProcessMessagesAsync(Message message, CancellationToken token)
{
var eventMessage = EventMessage.FromMessage(message);
await eventService.Write(eventMessage);
if (!token.IsCancellationRequested)
{
await queueClient.CompleteAsync(message.SystemProperties.LockToken);
}
}
private Task ExceptionReceivedHandler(ExceptionReceivedEventArgs exceptionReceivedEventArgs)
{
// log errors
...
return Task.CompletedTask;
}
}
我希望从一个IHostedService
甚至通过扩展BackgroundService
. 在我发现的示例中,工作不断在一个不适合我的场景的 while 循环中执行,因为我只尝试运行一个命令。
所以我创建了一个超级简单的实现,如下所示:
protected override async Task ExecuteAsync(CancellationToken cancellationToken)
{
serviceBusClient.Run();
while (!cancellationToken.IsCancellationRequested)
{
// empty loop to keep running for lifetime of pod
}
}
如果删除async
我显然需要返回一些东西。我试过Task.CompletedTask
了,但这需要我将返回类型更改为Task<Task>
.
如果我有适当的async
位置,我将需要await
一些东西,但我不确定是什么。
这感觉不对。ServiceBusClient
我认为我需要更改ProcessMessagesAsync
.
我想要的只是让我的网络应用程序开始监听消息,直到它死掉。我怎样才能做到这一点?