Quartz.netを使用してメッセージキューにメッセージを送信するスケジュールされたジョブを開発しています。 IJobのExecuteメソッドは非同期ではありません。だから私は非同期タスクを使用することはできません...しかし、私はawaitキーワードでメソッドを呼び出すしたい。私のコードを見てください。私が正しいことをしているかどうかは分かりません。誰もがこれで私を助けてくれる?C#メソッドを非同期メソッドを変更せずに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()
おかげ
[C#で同期メソッドから非同期メソッドを呼び出す方法は?](http://stackoverflow.com/questions/9343594/how-to-call-asynchronous-method-from-synchronous-method-in- c) – smoksnes