Я ищу идеи об использовании delegate
с async
и await
. Хорошо это или нет? Я искал в Google, но ни один из них не похож на мой.Должен ли я использовать делегат для объявления анонимного асинхронного метода?
я определяю способ, чтобы изменить статус сообщения (isRead = true
) с SignalR:
enum MessageStatus
{
Failure,
Success
}
delegate Task<MessageStatus> MsgDelegate(string id);
public async Task ChangeMessageStatus(string id)
{
string error = string.Empty;
MsgDelegate msg = async (x) =>
{
try
{
using (var db = new VinaChanelDbContext())
{
var message = db.Messages.SingleOrDefault(m => m.Id == x);
if (message != null)
{
message.IsRead = true;
}
return await db.SaveChangesAsync() > 0 ?
MessageStatus.Success : MessageStatus.Failure;
}
}
catch (Exception e)
{
error = e.Message;
return MessageStatus.Failure;
}
};
switch (await msg(id))
{
case MessageStatus.Success:
Clients.Caller.updateStatus(true);
break;
case MessageStatus.Failure:
Clients.Caller.errorMessage(error);
Clients.Caller.updateStatus(false);
break;
}
}
мой код странно? Должен ли я использовать его?
Почему вы используете делегат там, когда вы только вызываете делегата один раз? Вы решаете проблему с этим или просто хвастаетесь? :-) –
@GaryMcGill Вы имеете в виду, что я должен использовать 'делегат', если я назову его дважды или более раз в классе, не так ли? –
Ну, я имею в виду, что делегаты могут быть полезны в некоторых обстоятельствах, но вы, похоже, ищете причину их использования, вместо того, чтобы искать решение проблемы (какое решение может быть делегатом или чем-то еще). В чем проблема, которую вы пытаетесь решить? Я отправлю ответ, как бы я структурировал этот код. –