Как использовать делегат действия, чтобы избежать, если еще - PullRequest
0 голосов
/ 06 января 2020

У меня есть следующий код:

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)
    { 
    }

}

Как можно использовать делегат действия, чтобы избежать, если еще. Я пытался со следующим, но получаю ошибку из-за asyn c await.

Может кто-нибудь помочь, как сделать правильный путь?

Спасибо

1 Ответ

0 голосов
/ 06 января 2020

Ваш словарь должен соответствовать объявлению метода, ваши методы возвращают задачу, поэтому ваш

Action<IList<RecipientDetail>, NotificationMessageType>

должен быть изменен на что-то вроде

Func<IList<RecipientDetail>, NotificationMessageType,Task>

ваш метод должен вернуть задачу в чтобы использовать его в асинхронном / ожидающем режиме

...