我很困惑,哪种方法对我来说是最好的解决方案。
我有一个控制器调用方法' PostEventEmailMessage'在我打电话的方法里面
// do some work
var queueClient = QueueClient.CreateFromConnectionString(serviceBusConnectionString, queueName);
var sequenceToCancel = queueClient.ScheduleMessageAsync(message, postEventTimeToSendEmail);
queueClient.CloseAsync();
// do remaining work
我真的很困惑,下面哪种方法最适合同步运行,或者在Asp.Net MVC中是否有更好的解决方案?根据我引用的链接,似乎前两个选项存在死锁问题。
我应该使用吗? 1。
var sequenceToCancel = queueClient.ScheduleMessageAsync(message, postEventTimeToSendEmail).GetAwaiter().GetResult();
2
var sequenceToCancel = queueClient.ScheduleMessageAsync(message, postEventTimeToSendEmail).Result;
3
var sequenceToCancel = Task.Run(() => queueClient.ScheduleMessageAsync(message, postEventTimeToSendEmail)).Result;
我的控制器看起来像这样
public ActionResult SaveSpaceEvent(Details details) {
_spaceservice.SaveSpaceEvent(details);
}
然后是' SaveSpaceEvent'方法看起来像这样
public void SaveSpaceEvent(Details, details) {
// do some stuff
_messageService.PostEventEmailMessage(details)
// do more stuff
}
并在' PostEventEmailMessage'
中调用异步队列消息答案 0 :(得分:1)
为什么你想同步调用这个方法?使控制器操作为异步,并使用await
调用方法:
public async Task<ActionResult> SomeAction()
{
// ...
var sequenceToCancel = await queueClient.ScheduleMessageAsync(message, postEventTimeToSendEmail);
// ...
}