繁体   English   中英

切换任务 <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使用asyncawait

可能吗?

为什么必须是Task<T>

要遵循该链, Add必须为Task<ProgressStatus>因为它返回AddMessage(); ,即Task<ProgressStatus>

如何switch属性new Message().Add

回答就像“不”一样简单。 相反,请await Task<ProgressStatus>并使用结果。 一个Task不一定已经运行: await表示当前代码将等待任务完成。

ProgressStatus statusAfterAdding = await msg.Add;
switch (statusAfterAdding)
{
    // ...
}

您已经将awaitawait db.SaveChangesAsync();使用await db.SaveChangesAsync(); ,这是相同的事情: SaveChangesAsync返回一个Task<int> ,您await (尽管您忽略了返回的int )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM