Quartz.net を使用してメッセージ キューにメッセージを送信するスケジュールされたジョブを開発しています。IJob の Execute メソッドは非同期ではありません。そのため、非同期タスクを使用できません。しかし、 await キーワードでメソッドを呼び出したいです。
私のコードの下に見つけてください。私が正しいことをしているかどうかはわかりません。誰でもこれで私を助けてもらえますか?
private async Task PublishToQueue(ChangeDetected changeDetected)
{
_logProvider.Info("Publish to Queue started");
try
{
await _busControl.Publish(changeDetected);
_logProvider.Info($"ChangeDetected message published to RabbitMq. Message");
}
catch (Exception ex)
{
_logProvider.Error("Error publishing message to queue: ", ex);
throw;
}
}
public class ChangedNotificatonJob : IJob
{
public void Execute(IJobExecutionContext context)
{
//Publish message to queue
Policy
.Handle<Exception>()
.RetryAsync(3, (exception, count) =>
{
//Do something for each retry
})
.ExecuteAsync(async () =>
{
await PublishToQueue(message);
});
}
}
これは正しい方法ですか?.GetAwaiter(); を使用しました。
Policy
.Handle<Exception>()
.RetryAsync(_configReader.RetryLimit, (exception, count) =>
{
//Do something for each retry
})
.ExecuteAsync(async () =>
{
await PublishToQueue(message);
}).GetAwaiter()