-1
我正在尋找使用delegate
與async
和await
的想法。好不好?我在Google上搜索過,但沒有一個與我的相似。我應該使用委託來聲明一個匿名異步方法嗎?
我定義更改與SignalR消息狀態(isRead = true
)的方法:
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你的意思是我應該使用委託,如果我在課堂上多次調用它,不是嗎? –
好吧,我的意思是,代表可以在某些情況下有用,但你似乎在尋找使用它們的理由,而不是尋找問題的解決方案(該解決方案可能是委託或其他)。你想解決什麼問題?我會發佈一個答案,說明如何構造這些代碼。 –