【发布时间】:2020-01-06 16:02:12
【问题描述】:
我有以下代码:
public class NotificationService {
private readonly Dictionary<NotificationMessageType, Action<IList<RecipientDetail>, NotificationMessageType>> _actionMap;
public NotificationService() [
_actionMap = new Dictionary<NotificationMessageType, Action<IList<RecipientDetail>, NotificationMessageType>> ();
_actionMap.Add(NotificationMessageType.SessionBookedReminder, new Action<IList<RecipientDetail>, NotificationMessageType>(GenerateNotificationsAsync)); //getting errror here because of async await
}
public async Task GenerateNotificationsAsync(IList<RecipientDetail> usersToNotify, NotificationMessageType messageType)
{
如果这里有其他情况,想避免:
if(messageType == NotificationMessageType.SessionBookedReminder)
{
await Task.WhenAll(usersToNotify.Select(u => GenerateBookingNotificationAsync(u, messageType)).ToArray());
}
else
{
await Task.WhenAll(usersToNotify.Select(u => SendNotificationAsync(u, messageType)).ToArray());
}
}
public async Task GenerateNotificationsAsync(IList<RecipientDetail> usersToNotify, NotificationMessageType messageType)
{
}
public async Task GenerateBookingNotificationAsync(RecipientDetail userToNotify, NotificationMessageType messageType)
{
}
}
我如何使用动作委托来避免 if else。我尝试了以下操作,但由于异步等待而出错。
任何人都可以帮助如何做正确的方式?
谢谢
【问题讨论】:
-
await Task.WhenAll(usersToNotify.Select(u => messageType == NotificationMessageType.SessionBookedReminder ? GenerateBookingNotificationAsync(u, messageType) : SendNotificationAsync(u, messageType)).ToArray());你真的需要委托吗?