[英]Switch a Task<T> where T is an enum
我想要一个由属性返回的Task<T>
。
enum ProgressStatus
{
Success = 0,
Failure
}
interface IMessage
{
Task<ProgressStatus> AddMessage();
}
class Message : IMessage
{
public Task<ProgressStatus> Add
{
get
{
return AddMessage();
}
set
{
Add = value;
}
}
public async Task<ProgressStatus> AddMessage()
{
using (var db = new VinaChanelDbContext())
{
try
{
//do stuff...
await db.SaveChangesAsync();
return ProgressStatus.Success;
}
catch { return ProgressStatus.Failure; }
}
}
}
我的问题是:如何switch
属性new Message().Add
?
var msg = new Message();
switch (msg.Add) //this must be an enum instead of Task<enum>
{
case ProgressStatus.Success:
return Json(new { success = true });
case ProgressStatuc.Failure:
default:
return Json(new { success = false });
}
为什么必须是Task<T>
? 因为我想在方法AddMessage
使用async
并await
。
可能吗?
为什么必须是
Task<T>
?
要遵循该链, Add
必须为Task<ProgressStatus>
因为它返回AddMessage();
,即Task<ProgressStatus>
。
如何
switch
属性new Message().Add
?
回答就像“不”一样简单。 相反,请await
Task<ProgressStatus>
并使用结果。 一个Task不一定已经运行: await
表示当前代码将等待任务完成。
ProgressStatus statusAfterAdding = await msg.Add;
switch (statusAfterAdding)
{
// ...
}
您已经将await
与await db.SaveChangesAsync();
使用await db.SaveChangesAsync();
,这是相同的事情: SaveChangesAsync
返回一个Task<int>
,您await
(尽管您忽略了返回的int
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.