Как асинхронно вызвать синхронный метод?
Насколько я понимаю в текущей реализации библиотеки RabbitMQ.Client (https://www.nuget.org/packages/RabbitMQ.Client/) для c# нет асинхронного варианта для метода BasicPublish.
Я хотел бы что бы вызов этого метода был асинхронный что бы не блокировать потоки.
Я написал вот обёртку но не уверен в том что сделал это правильно, подскажите кто знает:
Exception exception = null;
await Task.Run(() => {
try {
_channel.BasicPublish("", basicProperties.ReplyTo, replyProps, content);
} catch (Exception e) {
exception = e;
}
});
if(exception != null) {
throw exception;
}
Ответы (2 шт):
Автор решения: Vasya Milovidov
→ Ссылка
Немного полистав интернет пришёл к такой реализации:
return Task.Run(() =>
_channel.BasicPublish("", basicProperties.ReplyTo, replyProps, content);
);
Автор решения: Мурад
→ Ссылка
Все то же самое, но без await. Можно так же сначала создать поток, потом его запустить:
Task task = new Task(() => {
try {
_channel.BasicPublish("", basicProperties.ReplyTo, replyProps, content);
} catch (Exception e) {
exception = e;
}
});
task.Start();