切换一个 Task<T> 其中 T 是一个枚举
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
可能吗?
Why must it be Task<T>
?
要跟随链条,Add
必须是 Task<ProgressStatus>
因为它 returns AddMessage();
,也就是 Task<ProgressStatus>
.
How to switch
property new Message().Add
?
回答就像"don't"一样简单。相反,await
Task<ProgressStatus>
并使用结果。任务不一定 运行 尚未:await
表示当前代码将等待任务完成。
ProgressStatus statusAfterAdding = await msg.Add;
switch (statusAfterAdding)
{
// ...
}
您已经将 await
与 await db.SaveChangesAsync();
一起使用,这是一回事:SaveChangesAsync
returns 一个 Task<int>
,您 await
(尽管您忽略了返回的 int
)。
我想得到一个 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
可能吗?
Why must it be
Task<T>
?
要跟随链条,Add
必须是 Task<ProgressStatus>
因为它 returns AddMessage();
,也就是 Task<ProgressStatus>
.
How to
switch
propertynew Message().Add
?
回答就像"don't"一样简单。相反,await
Task<ProgressStatus>
并使用结果。任务不一定 运行 尚未:await
表示当前代码将等待任务完成。
ProgressStatus statusAfterAdding = await msg.Add;
switch (statusAfterAdding)
{
// ...
}
您已经将 await
与 await db.SaveChangesAsync();
一起使用,这是一回事:SaveChangesAsync
returns 一个 Task<int>
,您 await
(尽管您忽略了返回的 int
)。